Установить цвет фона заголовка

В моем приложении Android я хочу, чтобы стандартная / основная строка заголовка меняла цвет.

Чтобы изменить цвет текста, у вас есть setTitleColor(int color) , есть ли способ изменить цвет фона на панели?

Solutions Collecting From Web of "Установить цвет фона заголовка"

Этот поток поможет вам начать с создания собственной строки заголовка в 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" /> 

Res / values ​​/ 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> 

Res / values ​​/ styles.xml – здесь мы задаем тему для использования цвета, который мы хотим для фона заголовка

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

Res / values ​​/ 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" ... 

Из Activity (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); } 

Спасибо за это ясное объяснение, однако я хотел бы добавить немного больше к вашему ответу, задав связанный вопрос (на самом деле не хочу делать новый пост, поскольку этот является подвалом моего вопроса).

Я объявляю свой заголовок в Суперклассе, из которого все мои другие действия являются дочерними, нужно менять цвет панели только один раз. Я также хотел бы добавить значок и изменить текст в панели. Я провел некоторое тестирование и смог изменить либо одно, либо другое, но не одновременно, используя setFeatureDrawable и setTitle. Идеальное решение было бы, конечно, следовать объяснению в потоке, указанном в ссылке, но, как я объявляю в суперклассе, у меня проблема из-за макета в setContentView и R.id.myCustomBar, потому что если i Хорошо помню, я могу вызвать 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); 

(Вы должны объявить textview как защищенную переменную класса)

И тогда сила этого в том, что повсюду в вашем приложении (если, например, все ваши действия являются детьми этого класса), вам просто нужно позвонить

 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> 

Существует еще один способ изменить цвет фона, однако он взломан и может выйти из строя в будущих версиях Android, если изменится иерархия представления окна и его название. Тем не менее, код не будет разбиваться, просто пропустите настройку желаемого цвета в таком случае.

В своей деятельности, например 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); } } 

Над кодом, который вы можете попробовать, вы можете использовать заголовок вместо заголовка, это повлияет на всю активность вашего приложения

Полагаю, нет. Вы можете создать беззаботную деятельность и создать свою собственную панель заголовка в макете действий.

Проверьте это , Строка 63 и ниже:

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

Настраивает пользовательское представление вместо заголовка заголовка по умолчанию.

Взгляните на 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/

Этот код помогает программно изменять фон заголовка в Android. Измените цвет на любой желаемый цвет.

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

Существует более простая альтернатива изменению цвета строки заголовка, используя библиотеку поддержки v7 appcompat, предоставляемую Google.

См. Эту ссылку о том, как настроить эту библиотеку поддержки: 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> 

)