it-roy-ru.com

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

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

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

105
Thys

Это тема поможет вам создать собственную строку заголовка в 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" ...

Из действия (называемого 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);

}
186
ccheneson

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

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

(вы должны объявить 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>
18
Sephy

Есть и другой способ изменить цвет фона, однако это будет взломом и может не сработать в будущих версиях 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));
  }
}
11
mikeplate
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);
      }
    }

в приведенном выше коде вы можете попробовать использовать title вместо titlebar это повлияет на все действия в вашем приложении

6
Pratishtha Goriya

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

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

}
6
Edwinfad

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

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

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

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

2
skyman

Загляните в platforms/Android-2.1/data/res/layout/screen.xml из SDK. Кажется, там определено название. Вы можете часто проверять макеты, подобные этой, и позаимствовать стили style="?android:attr/windowTitleStyle", которые затем можно использовать и переопределять в своих собственных текстовых представлениях.

Вы можете даже выбрать название для прямой настройки, выполнив:

TextView title = (TextView)findViewById(Android.R.id.title);
2
Steve Pomeroy

Попробуйте с помощью следующего кода

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/

2
Pratik Butani AndroidDev

С Android 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.html#ColorPalette

1
Loisaida Sam Sandberg

Существует более простая альтернатива для изменения цвета строки заголовка с помощью библиотеки поддержки app7 для v7, предоставляемой 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>

)

1
stefan.m

Я сделал это, изменив цветовые значения стиля в "res" -> "values" -> "colors.xml" enter image description here

Это изменит цвета для всего проекта, что меня устраивает.

enter image description here

1
Brlja

вы можете использовать это.

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