В моем приложении для Android я хочу, чтобы стандартная / базовая строка заголовка меняла цвет.
setTitleColor(int color)
Есть ли способ изменить цвет фона полосы, чтобы изменить цвет текста ?
В моем приложении для 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, потому что если я хорошо помните, я могу вызвать 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));
}
}
Этот код помогает программно изменить фон строки заголовка в Android. Измените цвет на любой, какой хотите.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
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)
устанавливает customview вместо просмотра заголовка по умолчанию.
Загляните в platforms/android-2.1/data/res/layout/screen.xml
SDK. Вроде бы определение там названия. Вы можете часто проверять такие макеты и заимствовать
style="?android:attr/windowTitleStyle"
стили, которые затем можно использовать и переопределить в своих собственных TextView.
Вы можете даже выбрать заголовок для прямой настройки, выполнив:
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
Вставьте этот код после setContentView или в onCreate
если у вас есть цветовой код, используйте это;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
если вы хотите использовать конкретный код из библиотеки цветов;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));