शीर्षक पृष्ठभूमि रंग सेट करें


106

अपने एंड्रॉइड एप्लिकेशन में मैं रंग बदलने के लिए मानक / मूल शीर्षक बार चाहता हूं।

आपके पास setTitleColor(int color)मौजूद टेक्स्ट कलर को बदलने के लिए , क्या बार का बैकग्राउंड कलर बदलने का कोई तरीका है?


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

मैं पुराने स्वीकृत एक के बजाय एडविनफैड के उत्तर को देखूंगा।
zgc7009

जवाबों:


186

यह धागा आपको एक xml फ़ाइल में अपना खुद का शीर्षक बार बनाने और अपनी गतिविधियों में इसका उपयोग करने के साथ शुरू होगा

संपादित करें

यहाँ ऊपर दिए गए लिंक की सामग्री का एक संक्षिप्त सारांश है - यह सिर्फ पाठ का रंग और शीर्षक पट्टी की पृष्ठभूमि निर्धारित करने के लिए है - कोई आकार नहीं, कोई बटन नहीं, बस सबसे सरल नमूना

रेस / लेआउट / mytitle.xml - यह वह दृश्य है जो शीर्षक बार का प्रतिनिधित्व करेगा

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="This is my new title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@color/titletextcolor"
   />

Res / मान / themes.xml - हम डिफ़ॉल्ट एंड्रॉइड थीम रखना चाहते हैं और बस शीर्षक पृष्ठभूमि का रंग बदलने की आवश्यकता है। इसलिए हम एक ऐसी थीम बनाते हैं जो डिफ़ॉल्ट थीम को विरासत में देती है और पृष्ठभूमि शैली को हमारी अपनी शैली में सेट करती है।

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

Res / मान / styles.xml - यह वह जगह है जहाँ हम शीर्षक पृष्ठभूमि के लिए इच्छित रंग का उपयोग करने के लिए थीम सेट करते हैं

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

Res / मान / colours.xml - यहां इच्छित रंग सेट करें

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

में AndroidManifest.xml , आवेदन (पूरे आवेदन के लिए) (केवल इस गतिविधि) टैग में या गतिविधि में या तो विषय विशेषता निर्धारित

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

गतिविधि से (जिसे CustomTitleBar कहा जाता है):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}

9
ज्यादातर समय बस एक लिंक प्रदान करना बहुत सस्ता है, और स्टैकओवरफ्लो पर वास्तव में जवाब पसंद नहीं है। इस पृष्ठ के लिंक से कुछ ज्ञान प्राप्त करने का प्रयास करें। आपको समुदाय में अधिक से अधिक ज्ञान प्राप्त होगा, और यदि लिंक नीचे है तो भी आप उत्तर देते हैं फिर भी कुछ खोज शब्द प्रदान करते हैं जो दिशा में अन्य लोगों को निर्देशित कर सकते हैं।
Janusz

7
@ जानुस: आप पूरी तरह से सही हैं - इसलिए मैंने सबसे सरल नमूने के साथ पोस्ट को अपडेट किया ताकि लोग उपरोक्त लिंक में धागे के माध्यम से पढ़ने के बजाय शुरू कर सकें
ccheneson

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

1
जैसा कि Janusz ने कहा, आपको एक कस्टम दृश्य की आवश्यकता नहीं है यदि आप केवल उपयोग की गई शैली को ओवरराइड करना चाहते हैं (नए दृश्य जोड़ना नहीं)। उस स्थिति में आपको FEATURE_CUSTOM_STYLE के लिए अनुरोध करने की भी आवश्यकता नहीं है। अंत में, आप शैली को एक बार में अपनी सभी गतिविधियों पर लागू करने के लिए एप्लिकेशन स्तर को परिभाषित कर सकते हैं। कोड के लिए धन्यवाद, वैसे।
एरिक कोक

2
यह शीर्षक की पृष्ठभूमि का रंग नहीं बदल रहा है केवल पाठ का रंग बदल रहा है। भले ही मैं शीर्षक बार का रंग बदल रहा हूं <color name = "titlebackgroundcolor"> # 3232CD </ color>। क्या मुझसे कुछ गलत हो रही है?
शाइस्ता नाज़

18

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

मैं अपने टाइटलबार को एक सुपरक्लास में घोषित कर रहा हूं जिसमें से, मेरी अन्य सभी गतिविधियाँ बच्चे हैं, बार का रंग केवल एक बार बदलना है। मैं एक आइकन जोड़ना चाहूंगा और बार में टेक्स्ट बदलूंगा। मैंने कुछ परीक्षण किए हैं, और एक या दूसरे को बदलने में कामयाब रहा है लेकिन दोनों एक ही समय में (setFeatureDrawable और setTitle का उपयोग करके) नहीं। आदर्श समाधान निश्चित रूप से लिंक में दिए गए थ्रेड में स्पष्टीकरण का पालन करने के लिए होगा, लेकिन जैसा कि मैं एक सुपरक्लास में घोषणा कर रहा हूं, मेरे पास सेट-कंटेंटव्यू और R.id.myCustomBar में लेआउट के कारण एक समस्या है, क्योंकि यदि मैं अच्छी तरह से याद है मैं केवल एक बार setContentView कॉल कर सकता हूँ ...

EDIT को मेरा उत्तर मिला:

उन लोगों के लिए, जो मेरे जैसे हैं, सुपरक्लास के साथ काम करना पसंद करते हैं क्योंकि यह एक ऐप में हर जगह उपलब्ध मेनू के लिए बहुत अच्छा है, यह यहाँ भी काम करता है।

बस इसे अपने सुपरक्लास में जोड़ें:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(आपको पाठ्यपुस्तक को संरक्षित वर्ग चर के रूप में घोषित करना होगा)

और फिर इस की शक्ति यह है कि हर जगह आप ऐप में हैं (यदि उदाहरण के लिए आपकी सभी गतिविधियां इस वर्ग के बच्चे हैं), तो आपको बस कॉल करना होगा

customTitleText.setText("Whatever you want in title");

और आपका शीर्षकबार संपादित किया जाएगा।

मेरे मामले में XML जुड़ा हुआ है (R.layout.customtitlebar):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
    android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
    android:layout_width="wrap_content" android:layout_height="fill_parent"
    android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
    android:background="@color/background" android:padding="3px" />
</LinearLayout>

मुझे वोट क्यों दिया जा रहा है? मेरे कोड में क्या गलत है? यह मेरे लिए पूरी तरह से काम करता है ...
सिपाही

1
एक शुरुआती होने के नाते मुझे लगता है कि ऊपर अच्छा स्पष्टीकरण के साथ कोड का एक अच्छा टुकड़ा है। आपके लिए +1 !!!
आरके

@ मुझे बार बार टाइटल के लिए अलग से क्लास क्यों बनानी है?
विकास गुप्ता

यहाँ काम नहीं कर रही है stackoverflow.com/questions/31157222/…
आदित्य

11

पृष्ठभूमि का रंग बदलने का एक और तरीका है, हालांकि यह एक हैक है और एंड्रॉइड के भविष्य के संस्करणों पर विफल हो सकता है यदि विंडो का पदानुक्रम और इसका शीर्षक बदल गया है। हालाँकि, कोड क्रैश नहीं होगा, बस ऐसे मामले में वांछित रंग सेट करना याद रखें।

अपनी गतिविधि में, onCreate की तरह, करें:

View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
  ViewParent parent = titleView.getParent();
  if (parent != null && (parent instanceof View)) {
    View parentView = (View)parent;
    parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
  }
}

बहुत अच्छा और सरल भी। लेकिन मैं आपसे एक बात पूछना चाहता हूं कि यह एक कोड से कर रहा है इसलिए यह थोड़ा विलंबित है। ऐसी स्थिति से बचने के लिए मुझे हर चीज़ को xml में लिखना होगा और कोड में कुछ भी नहीं। तो क्या आप मुझे इसमें मार्गदर्शन कर सकते हैं?
शाइस्ता नाज़

मुझे लगता है कि आपके पास ऊपर दिए गए चयनित उत्तर में समाधान है। आपको गतिविधि के लिए एक कस्टम थीम को परिभाषित करने और उसके एंड्रॉइड को सेट करने की आवश्यकता है: windowTitleBackgroundStyle जो रंग आप चाहते हैं।
माइकप्लेट

7

यह कोड एंड्रॉइड में प्रोग्राम बार की टाइटल की पृष्ठभूमि को बदलने में मदद करता है। रंग को अपने इच्छित रंग में बदलें।

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}

यह एपीआई 11 (3.0 हनीकॉम्ब) में पेश किया गया था जो निश्चित रूप से इस बिंदु पर काफी पुराना है जो इसे एक वैध विकल्प पर विचार करता है।
zgc7009

लेकिन मैं अभी भी अपने सभी हाल के अनुप्रयोगों में इसका उपयोग कर रहा हूँ targetSdkVersion = "23" के साथ बिना किसी सूचना के।
एडविनफैड

बिल्कुल, यह उपयोग करने के लिए 100% ठीक है। इसे किसी भी चीज़ से प्रतिस्थापित नहीं किया गया है, लेकिन एपीआई 11 (जो बहुत कम लोग कर रहे हैं) से पहले इसका उपयोग करने से बचना चाहिए, कम से कम एक संगतता पुस्तकालय के बिना।
zgc7009

का उल्लेख किया। @ zgc7009
एडविनफैड

1
उपयोग getSupportActionBar () के बजाय अगर आप AppCompatActivity उपयोग कर रहे हैं
mondlos

6
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

कोड ऊपर पर आप आप उपयोग कर सकते हैं की कोशिश कर सकते शीर्षक के बजाय शीर्षक पट्टी यह आपके आवेदन की सभी गतिविधियों पर प्रभावित करेगा


2

मुझे लगता है नहीं। आप शीर्षक रहित गतिविधि बना सकते हैं और गतिविधि लेआउट में अपना खुद का शीर्षक बार बना सकते हैं।

चेक इस , रेखा 63 और नीचे:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

डिफ़ॉल्ट शीर्षक दृश्य के बजाय कस्टमव्यू सेट करता है।


मैं / कस्टम टाइटल बार कैसे / कहाँ बना सकता / सकती हूँ?
थिज़र 22

2

platforms/android-2.1/data/res/layout/screen.xmlएसडीके की एक झलक ले लो । ऐसा लगता है कि वहां एक शीर्षक परिभाषित किया गया है। आप अक्सर इस तरह से लेआउट की जांच कर सकते हैं और उन style="?android:attr/windowTitleStyle" शैलियों को उधार ले सकते हैं जिन्हें आप तब उपयोग कर सकते हैं और अपने स्वयं के TextViews में ओवरराइड कर सकते हैं।

आप ऐसा करने के लिए भी सीधे ट्विकिंग के लिए शीर्षक का चयन करने में सक्षम हो सकते हैं:

TextView title = (TextView)findViewById(android.R.id.title);

1
ऊपर दिए गए अच्छे उत्तर लेकिन क्या इसके लिए कस्टम लेआउट बनाने के बिना केवल शीर्षक बार को रंगना संभव है?
Eno

2

निम्नलिखित कोड के साथ प्रयास करें

View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

इस लिंक को इसके बहुत उपयोगी उपयोग करें: http://nathanel.hevenet.com/android-dev-changing-the-title-bar-background/


क्या यह अभी भी लॉलीपॉप के साथ काम करता है? titleView मेरे लिए अशक्त लौट रहा है।
शाम

1

Google द्वारा प्रदान की गई v7 appcompat सपोर्ट लाइब्रेरी का उपयोग करके टाइटल बार का रंग बदलने का एक आसान विकल्प है।

इस समर्थन लाइब्रेरी को सेटअप करने के तरीके के बारे में इस लिंक को देखें: https://developer.android.com/tools/support-library/setup.html

एक बार जब आप ऐसा कर लेते हैं, तो यह आपके रेस / मान / स्टाइल.xml फ़ाइल में निम्न पंक्तियाँ जोड़ने के लिए पर्याप्त है:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>

<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/titlebackgroundcolor</item>
</style>

(यह मानते हुए कि "टाइटलबैकग्राउंड कलर" आपके रेस / वैल्यू / कलर्स में परिभाषित किया गया है। उदाहरण के लिए:

<color name="titlebackgroundcolor">#0000AA</color>

)


जब आप केवल एंड्रॉइड 5 को लक्षित करते हैं , तो एक और भी सरल विकल्प होता है, देखें [ developer.android.com/training/material/…
stefan.m.

1

एंड्रॉइड 5.0 (एपीआई स्तर 21) के बाद से चीजें बेहतर / आसान हो गई हैं।

मुझे लगता है कि आप जो खोज रहे हैं वह कुछ इस तरह है:

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Top-top notification/status bar color: -->
    <!--<item name="colorPrimaryDark">#000000</item>-->
    <!-- App bar color: -->
    <item name="colorPrimary">#0000FF</item>
</style>

संदर्भ के लिए यहां देखें:

https://developer.android.com/training/material/theme.html#ColorPalette


1

मैंने "रेस" -> "मान" -> "color.xml" में शैली के रंग मूल्यों को बदलकर ऐसा किया है यहां छवि विवरण दर्ज करें

यह पूरे प्रोजेक्ट के लिए रंग बदलेगा जो मेरे साथ ठीक है।

यहां छवि विवरण दर्ज करें


0

आप इसका उपयोग कर सकते हैं।

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));

0

इस कोड को setContentView या onCreate के बाद पेस्ट करें

यदि आपके पास रंग कोड है, तो इसका उपयोग करें;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));

यदि आप कलर लाइब्रेरी से एक विशिष्ट कोड चाहते हैं, तो इसका उपयोग करें;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.