سؤال

في تطبيق Android الخاص بي، أريد أن يتغير لون شريط العنوان القياسي/الأساسي.

لتغيير لون النص لديك setTitleColor(int color), هل هناك طريقة لتغيير لون خلفية الشريط؟

هل كانت مفيدة؟

المحلول

هذا خيط سوف يساعدك على البدء في إنشاء شريط العنوان الخاص بك في ملف xml واستخدامه في أنشطتك

يحرر

فيما يلي ملخص موجز لمحتوى الرابط أعلاه - هذا هو فقط لتعيين لون النص وخلفية شريط العنوان - بدون تغيير الحجم أو أزرار، فقط أبسط عينة

res/layout/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"
   />

الدقة/القيم/themes.xml - نريد الاحتفاظ بسمة Android الافتراضية ونحتاج فقط إلى تغيير لون خلفية خلفية العنوان.لذلك نقوم بإنشاء سمة ترث السمة الافتراضية ونضبط نمط الخلفية على أسلوبنا الخاص.

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

الدقة/القيم/styles.xml - هذا هو المكان الذي قمنا فيه بتعيين السمة لاستخدام اللون الذي نريده لخلفية العنوان

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

الدقة/القيم/colors.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);

}

نصائح أخرى

شكرًا على هذا الشرح الواضح، ولكن أود أن أضيف المزيد إلى إجابتك عن طريق طرح سؤال مرتبط (لا أريد حقًا إنشاء مشاركة جديدة لأن هذا هو الطابق السفلي لسؤالي).

أعلن أن شريط العنوان الخاص بي موجود في فئة Superclass، حيث تكون جميع أنشطتي الأخرى أطفالًا، ويجب علي تغيير لون الشريط مرة واحدة فقط.أود أيضًا إضافة رمز وتغيير النص في الشريط.لقد أجريت بعض الاختبارات، وتمكنت من تغيير أحدهما أو الآخر ولكن ليس كليهما في نفس الوقت (باستخدام setFeatureDrawable وsetTitle).سيكون الحل المثالي بالطبع هو اتباع الشرح الموجود في الموضوع الوارد في الرابط، ولكن كما أعلن في فئة فائقة، لدي مشكلة بسبب التخطيط في setContentView وR.id.myCustomBar، لأنه إذا كنت تذكر جيدًا أنه يمكنني الاتصال بـ setContentView مرة واحدة فقط ...

يحرروجدت إجابتي:

بالنسبة لأولئك الذين يحبون، مثلي، العمل مع الفئات المتفوقة لأنها رائعة للحصول على قائمة متاحة في كل مكان في التطبيق، فهي تعمل بنفس الطريقة هنا.

فقط أضف هذا إلى الطبقة الفائقة الخاصة بك:

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>

وهناك طريقة أخرى لتغيير لون الخلفية، ومع ذلك فإنه الإختراق وقد تفشل في الإصدارات مستقبل الروبوت إذا تم تغيير عرض التسلسل الهرمي من النوافذ وعنوانه. ومع ذلك، فإن القانون لا يتلف، فقط أفتقد وضع اللون المطلوبين، في مثل هذه الحالة.

في آخر لديك، مثل 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));
  }
}
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);
      }
    }

على الكود أعلاه يمكنك تجربة ما يمكنك استخدامه عنوان بدلاً من شريط العنوانسيؤثر هذا على جميع الأنشطة في تطبيقك

وهذا الرمز يساعد على تغيير خلفية شريط العنوان برمجيا في الروبوت. تغيير اللون إلى أي لون تريد.

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

}

وافترض لا. يمكنك إنشاء نشاط titleless وإنشاء شريط العنوان الخاص بك في تخطيط النشاط.

وتحقق <لأ href = "http://android.git.kernel.org/؟p=platform/development.git؛a=blob؛f=samples/ApiDemos/src/com/example/android/apis/ التطبيق / CustomTitle.java، ح = e22a5cc6f9574b9af0b927141f0e3b2f59fe82cb، HB = رأس "يختلط =" noreferrer نوفولو "> هذا أو خط 63 وتحت:

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

ومجموعات customview بدلا من عرض العنوان الافتراضي.

ونلقي نظرة خاطفة في platforms/android-2.1/data/res/layout/screen.xml من SDK. على ما يبدو لتحديد عنوان هناك. يمكنك فحص كثيرا تخطيطات مثل هذا واستعارة             style="?android:attr/windowTitleStyle" الأساليب التي يمكنك استخدامها بعد ذلك وتجاوز في TextViews بنفسك.

وأنت قد تكون قادرة حتى على تحديد عنوان التغيير والتبديل المباشر عن طريق القيام:

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

وحاول مع التعليمات البرمجية التالية

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: / /nathanael.hevenet.com/android-dev-changing-the-title-bar-background/

هناك بديل أسهل لتغيير لون شريط العنوان، وذلك باستخدام مكتبة دعم v7 appcompat التي توفرها جوجل.

راجع هذا الرابط حول كيفية إعداد مكتبة الدعم هذه: https://developer.Android.com/tools/support-library/setup.html

بمجرد الانتهاء من ذلك، يكفي إضافة الأسطر التالية إلى ملف res/values/styles.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>

(بافتراض أنه تم تعريف "titlebackgroundcolor" في ملف res/values/colors.xml، على سبيل المثال:

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

)

ويبدو أن الأمور قد حصلت على أفضل / أسهل منذ الروبوت 5.0 (مستوى API 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 هتمل # ColorPalette

ولقد فعلت ذلك عن طريق تغيير القيم على غرار اللون في "احتياط" -> "القيم" -> "colors.xml"

وهذا لن يتغير لونا لكامل المشروع التي على ما يرام معي.

ويمكنك استخدامه.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top