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

В моем приложении 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" /> 

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> 

)

Intereting Posts
Как изменить имя издателя в google play Android x86 эмулятор экстремально медленный Телефонная геолокация не работает Как увеличить скорость загрузки аудио с помощью JavaScript? Как использовать HttpURLConnection через прокси SOCKS на Android Кнопка фрагмента внутри триггера ViewPager onClickListener при неправильной ссылке Ошибка java.lang.IndexOutOfBoundsException: недопустимый индекс 0, размер 0 в моей программе android Android Studio 1.1, простая настройка теста junit Backported StreamSupport на Java 7 / Android Как запустить одно и то же действие в отдельном окне в многоэкранном режиме Android N? Круглая стрелка Android Сбой переполнения, не работающий на Android Есть ли способ сделать webview, работающий под управлением Android 4.0, на приемлемом уровне? Диалоговое окно «Предупреждение» Две кнопки Получение ошибки / предупреждения для множественного числа: «Количество« один »соответствует более чем одному конкретному номеру …»