Цвет фона заголовка набора

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

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

106
задан brc 27 July 2012 в 19:35
поделиться

4 ответа

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

<?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" ...

From the 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);

}
186
ответ дан 24 November 2019 в 03:49
поделиться

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

Отметьте это , Строка 63 и ниже:

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

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

2
ответ дан 24 November 2019 в 03:49
поделиться

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

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

TextView title = (TextView)findViewById(android.R.id.title);
2
ответ дан 24 November 2019 в 03:49
поделиться

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

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

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

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

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
ответ дан 24 November 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: