У моєму додатку для 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 / color.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);
}
Дякую за це чітке пояснення, проте я хотів би додати трохи більше до вашої відповіді, задавши пов’язане запитання (не дуже хочеться робити нову посаду, оскільки ця є підвалом мого запитання).
Я оголошую свій титульний рядок в суперкласі, з якого всі інші мої дії - це діти, які повинні змінити колір смужки лише один раз. Я також хотів би додати піктограму та змінити текст у рядку. Я провів кілька тестувань і встиг змінити або те, і інше, але не обидва одночасно (використовуючи setFeatureDravable та 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>
Існує ще один спосіб змінити колір тла, однак він може зламатись і може бути збійним у майбутніх версіях 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"
стилі, які ви зможете потім використовувати та змінювати у власних 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 / color.xml, наприклад:
<color name="titlebackgroundcolor">#0000AA</color>
)
Начебто речі ставали кращими / легшими після Android 5.0 (рівень 21 API).
Я думаю, що ти шукаєш щось таке:
<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));