IT-Swarm.Net

मैं appcompat-v7 टूलबार को Theme.AppCompat.Light.DarkActionBar की तरह कैसे करूँ?

मैं नए समर्थन पुस्तकालय टूलबार के साथ Theme.AppCompat.Light.DarkActionBar के लुक को फिर से बनाने की कोशिश कर रहा हूं।.

यदि मैं Theme.AppCompat.Light का चयन करता हूं तो मेरा टूलबार हल्का होगा और यदि मैं Theme.AppCompat का चयन करता हूं तो यह अंधेरा हो जाएगा। (तकनीकी तौर पर आपको .NoActionBar संस्करण का उपयोग करना होगा लेकिन जहां तक ​​मैं बता सकता हूं कि एकमात्र अंतर है

<style name="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="Android:windowNoTitle">true</item>
</style>

अब कोई Theme.AppCompat.Light.DarkActionBar नहीं है, लेकिन भोलेपन से मैंने सोचा कि यह सिर्फ अपना खुद का बनाने के लिए काफी अच्छा होगा

<style name="Theme.AppCompat.Light.DarkActionBar.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="Android:windowNoTitle">true</item>
</style>

हालाँकि इसके साथ मेरे टूलबार अभी भी Light थीम्ड हैं। मैंने अब घंटो डार्क (बेस) थीम और लाइट थीम को मिक्स करने की कोशिश की है, लेकिन मुझे अभी ऐसा कॉम्बिनेशन नहीं मिल रहा है जिससे मुझे लाइट बैकग्राउंड सब कुछ मिल जाए लेकिन टूलबार।.

वहाँ AppCompat.Light.DarkActionBar आयात Android.support.v7.widget.Toolbar 'के साथ देखने का एक तरीका है?

99
Liminal

टूलबार को Light.DarkActionBar क्लोन के लिए स्टाइल करने का अनुशंसित तरीका माता-पिता/ऐप थीम के रूप में Theme.AppCompat.Light.DarkActionbar का उपयोग करना होगा और डिफ़ॉल्ट ActionBar को छिपाने के लिए शैली में निम्नलिखित विशेषताएं जोड़ें:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

फिर अपने टूलबार के रूप में निम्नलिखित का उपयोग करें:

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</Android.support.design.widget.AppBarLayout>

आगे के संशोधनों के लिए, आप ThemeOverlay.AppCompat.Dark.ActionBar और ThemeOverlay.AppCompat.Light के स्थान पर AppBarLayout->Android:theme और Toolbar->app:popupTheme की जगह बनाने वाली शैलियों का निर्माण करेंगे। यह भी ध्यान दें कि यह आपके ?attr/colorPrimary को उठाएगा यदि आपने इसे अपनी मुख्य शैली में सेट किया है तो आपको एक अलग पृष्ठभूमि रंग मिल सकता है।.

आपको इसका एक अच्छा उदाहरण मिलेगा वर्तमान प्रोजेक्ट टेम्पलेट में एंड्रॉइड स्टूडियो के Empty Activity (1.4+) के साथ है।.

207
oRRs

संपादित करें: Appcompat-v7: 22.1.1 में अपडेट करने के बाद और AppCompatActivity के बजाय ActionBarActivity का उपयोग करके मेरी शैलियाँ। xml जैसा दिखता है:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

नोट: इसका मतलब है कि मैं फ्रेमवर्क द्वारा प्रदान किए गए Toolbar का उपयोग कर रहा हूं (XML फ़ाइल में शामिल नहीं है)।.

यह मेरे लिए काम किया:
styles.xml फ़ाइल:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

अपडेट: गैब्रियल मारियोटी के ब्लॉग का एक उद्धरण ।.

नए टूलबार के साथ आप एक शैली और एक थीम लागू कर सकते हैं। वे भिन्न हैं! टूलबार दृश्य के लिए शैली स्थानीय है, उदाहरण के लिए पृष्ठभूमि का रंग। एप्लिकेशन: थीम टूलबार में फुलाए गए सभी यूआई तत्वों के लिए वैश्विक है, उदाहरण के लिए शीर्षक और आइकन का रंग।.

70
LordRaydenMK

ठीक है इस समस्या में ज्यादा समय तक डूबने के बाद मैं जिस तरह की उम्मीद कर रहा था उसे पाने में कामयाब रहा। मैं इसे एक अलग उत्तर बना रहा हूं ताकि मुझे सब कुछ एक ही स्थान पर मिल सके।.

यह कारकों का एक संयोजन है।.

सबसे पहले, सिर्फ विषयों के माध्यम से नाइस खेलने के लिए टूलबार प्राप्त करने का प्रयास न करें। यह असंभव मालूम पड़ता है।.

इसलिए अपने टूलबार में स्पष्ट रूप से थीम लागू करें जैसे ओआरआरएस उत्तर

लेआउट/toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_alignParentTop="true"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    app:theme="@style/Dark.Overlay"
    app:popupTheme="@style/Dark.Overlay.LightPopup" />

हालाँकि यह जादू की चटनी है। वास्तव में पृष्ठभूमि रंग प्राप्त करने के लिए मैं आपके टूलबार थीम में background विशेषता को ओवरराइड करने की उम्मीद कर रहा था

मान/styles.xml:

<!-- 
    I expected Android:colorBackground to be what I was looking for but
    it seems you have to override Android:background
-->
<style name="Dark.Overlay" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:background">?attr/colorPrimary</item>
</style>

<style name="Dark.Overlay.LightPopup" parent="ThemeOverlay.AppCompat.Light">
    <item name="Android:background">@color/material_grey_200</item>
</style>

तो बस अपने टूलबार लेआउट को अपने अन्य लेआउट में शामिल करें

<include Android:id="@+id/mytoolbar" layout="@layout/toolbar" />

और तुम जाने के लिए अच्छा हो.

आशा है कि यह किसी और की मदद करता है ताकि आपको इस पर उतना समय खर्च न करना पड़े जितना मेरे पास है।.

(अगर कोई यह पता लगा सकता है कि सिर्फ थीम का उपयोग करके यह काम कैसे किया जाए, अर्थात लेआउट फ़ाइलों में स्पष्ट रूप से विषयों को लागू न करने के लिए, मैं खुशी से उनके जवाब का समर्थन करूंगा)

EDIT:

तो जाहिरा तौर पर एक और अधिक पूर्ण उत्तर पोस्ट करना एक डाउनवोट चुंबक था इसलिए मैं सिर्फ ऊपर दिए गए अधूरे उत्तर को स्वीकार करूंगा लेकिन अगर किसी को वास्तव में इसकी आवश्यकता है तो इस उत्तर को यहां छोड़ दें। हालांकि यह आपको खुश करता है या नहीं, तो इसे कमज़ोर रखने के लिए स्वतंत्र महसूस करें।.

31
Liminal

मुझे ऐसा करने का सबसे साफ तरीका ' ThemeOverlay.AppCompat.Dark.ActionBar ' का बच्चा है। उदाहरण में, मैंने टूलबार के बैकग्राउंड कलर को RED और टेक्स्ट के कलर को BLUE में सेट किया है।.

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:background">#FF0000</item>
    <item name="Android:textColorPrimary">#0000FF</item>
</style>

तब आप टूलबार में अपनी थीम लागू कर सकते हैं:

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    app:theme="@style/MyToolbar"
    Android:minHeight="?attr/actionBarSize"/>
15
Don

Yout इसे नीचे आज़मा सकते हैं।.

<style name="MyToolbar" parent="Widget.AppCompat.Toolbar">
    <!-- your code here -->
</style>

और विस्तार तत्व आप उन्हें https://developer.Android.com/reference/Android/support/v7/appcompat/R.styleable.html#Toolbar में पा सकते हैं

यहाँ कुछ और हैं: TextAppearance.Widget.AppCompat.Toolbar.Title, TextAppearance.Widget.AppCompat.Toolbar.Subtitle, Widget.AppCompat.Toolbar.Button.Navigation।.

आशा है इससे आपको सहायता मिलेगी।.

6
Yong

अर्नव राव के समान, लेकिन एक अलग माता-पिता के साथ:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="toolbarStyle">@style/MyToolbar</item>
</style>

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:background">#ff0000</item>
</style>

इस दृष्टिकोण के साथ, टूलबार की उपस्थिति पूरी तरह से ऐप शैलियों में परिभाषित की गई है, इसलिए आपको प्रत्येक टूलबार पर कोई स्टाइल लगाने की आवश्यकता नहीं है।.

1
craigmj