В моем приложении Android я хочу, чтобы стандартная/основная строка заголовка меняла цвет.
Чтобы изменить цвет текста у вас есть setTitleColor(int color)
, есть ли способ изменить цвет фона на панели?
В моем приложении Android я хочу, чтобы стандартная/основная строка заголовка меняла цвет.
Чтобы изменить цвет текста у вас есть setTitleColor(int color)
, есть ли способ изменить цвет фона на панели?
Этот поток начнет с создания собственной строки заголовка в 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/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, потому что если я хорошо помню, я могу вызвать setContentView только один раз...
ИЗМЕНИТЬ Нашел мой ответ:
Для тех, кто, как и я, любит работать с суперклассами, потому что он отлично подходит для получения меню в любом месте приложения, он работает здесь же.
Просто добавьте это в свой суперкласс:
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>
Существует еще один способ изменить цвет фона, однако он взломан и может оказаться неудачным в будущих версиях 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 вместо titlebar это повлияет на всю активность вашего приложения.
Этот код помогает программно изменять фон заголовка в Android. Измените цвет на любой желаемый цвет.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
Я полагаю, нет. Вы можете создать безрисковую активность и создать свою собственную панель заголовка в макете действий.
Отметьте this, строка 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"
стили, которые вы затем можете использовать и переопределить в своих собственных 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/
Существует более простая альтернатива изменению цвета строки заголовка, используя библиотеку поддержки 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>
)
Кажется, что все стало лучше/проще с 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