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



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



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

479   10  

10 ответов:

этой thread вы начнете с создания собственной строки заголовка в xml-файле и использования ее в своей деятельности

Edit

вот краткое изложение содержания ссылки выше-это просто чтобы установить цвет текста и фона строки заголовка - без изменения размера, без кнопок, просто самый простой образец

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 / значения / темы.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 / значения / цвета.xml - установить цвет вы хотите

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

на AndroidMANIFEST.xml, установите атрибут темы либо в приложении (для всего приложения), либо в тегах activity (только эта активность)

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

}

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

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

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

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

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

}

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

Регистрация этой, строка 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" стили, которые затем можно использовать и переопределять в собственных текстовых представлениях.

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

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, предоставленную Google.

см. эту ссылку о том, как настроить эту библиотеку поддержки:https://developer.android.com/tools/support-library/setup.html

после того, как вы это сделали, достаточно добавить следующие строки к вашим res/значениям/стилям.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/значений/цвета.xml, например:

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

)

Кажется, что все стало лучше / проще с 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

Comments

    Ничего не найдено.