Как скрыть заголовок для конкретных Android‑активностей
Узнайте, как скрыть заголовок для конкретных Android‑активностей. Создайте NoActionBar и примените его к нужным активностям для отображения в AndroidManifest.xml.
Как скрыть заголовок (title bar) для конкретных активностей в Android XML при наличии уже существующей пользовательской темы
Я хочу скрыть заголовок для некоторых моих активностей. Проблема в том, что я применил стиль ко всем своим активностям, поэтому я не могу просто установить тему @android:style/Theme.NoTitleBar.
Использование темы NoTitleBar в качестве родителя для моего стиля удалит заголовок со всех моих активностей.
Есть ли способ задать элемент no‑title для конкретных активностей, не затрагивая остальные?
Чтобы скрыть строку заголовка только для конкретных активностей в Android, сохраняя при этом ваш существующий пользовательский стиль для остальных, необходимо создать новый стиль, наследующийся от текущей темы и добавляющий атрибуты отключения заголовка. Ниже приведено пошаговое руководство по реализации этого решения.
Содержание
- Создание пользовательского стиля без ActionBar
- Применение стиля к конкретным активностям
- Обеспечение совместимости с разными версиями Android
- Программальный альтернативный способ
- Полный пример
Создание пользовательского стиля без ActionBar
Ключевая идея – создать новый стиль, который наследует все свойства вашего текущего AppTheme, но отключает ActionBar и заголовок окна. Это позволяет сохранить ваш пользовательский дизайн, но убрать строку заголовка только для нужных активностей.
В файле res/values/styles.xml добавьте новый стиль:
<style name="AppTheme.NoActionBar" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Если вы используете AppCompat (что рекомендуется), добавьте также атрибуты из пространства имён android::
<style name="AppTheme.NoActionBar" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
Применение стиля к конкретным активностям
После создания стиля примените его к нужным активностям в AndroidManifest.xml. Это позволяет задать индивидуальные настройки без влияния на остальные экраны.
<application
android:theme="@style/AppTheme">
<!-- Активности с заголовком -->
<activity android:name=".MainActivity" />
<activity android:name=".SettingsActivity" />
<!-- Активности без заголовка -->
<activity
android:name=".FullScreenActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".GameActivity"
android:theme="@style/AppTheme.NoActionBar" />
</application>
Таким образом:
- Большинство экранов остаются с
AppTheme. - Только указанные активности используют
AppTheme.NoActionBar. - Сохраняется единый стиль приложения.
Обеспечение совместимости с разными версиями Android
Разные версии Android могут требовать небольших отличий. Ниже приведены варианты для AppCompat и Material Design.
Для AppCompat (рекомендуется)
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
Для Material Design
<style name="AppTheme.NoActionBar" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
Альтернативный подход с базовым темой
Если вы не хотите менять существующую тему, можно использовать базовую тему:
<activity
android:name=".FullScreenActivity"
android:theme="@android:style/Theme.Black.NoTitleBar" />
Однако такой вариант не наследует ваш пользовательский стиль, поэтому предпочтительнее первый метод.
Программальный альтернативный способ
XML‑метод предпочтителен для поддерживаемости, но можно скрыть заголовок программно в onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Скрыть ActionBar
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
setContentView(R.layout.activity_full_screen);
}
Для старых версий Android или без AppCompat:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_full_screen);
}
Недостатки программного подхода:
- Заголовок виден до выполнения кода.
- Требует изменений в каждом активити.
- Не обеспечивает единый стиль.
Полный пример
Ниже приведён полный рабочий пример.
Шаг 1: Обновите styles.xml
<resources>
<!-- Базовая тема приложения -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Настройте вашу тему здесь -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- Тема без заголовка -->
<style name="AppTheme.NoActionBar" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
Шаг 2: Обновите AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- Активность с заголовком -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Активность без заголовка -->
<activity
android:name=".FullScreenActivity"
android:theme="@style/AppTheme.NoActionBar" />
</application>
Шаг 3: Проверьте результат
Запустив приложение:
MainActivityотобразится с заголовком.FullScreenActivityотобразится без заголовка.- Оба экрана сохранят ваш пользовательский стиль.
Источники
- How to hide the title bar for an Activity in XML with existing custom theme - Stack Overflow
- How to remove title bar from the android activity - Stack Overflow
- Android - How to remove the title bar from your application activity - sebhastian
- Styling the Action Bar - Android Developers
- Android Custom ActionBar Style Example - Dev2QA
Вывод
Скрыть заголовок для отдельных активностей, сохраняя общий пользовательский стиль, можно, создав пользовательский стиль NoActionBar. Ключевые моменты:
- Создайте стиль, наследующий ваш
AppTheme, и добавьтеwindowActionBar=falseиwindowNoTitle=true. - Примените его к нужным активностям через атрибут
android:themeвAndroidManifest.xml. - XML‑метод предпочтителен над программным, так как обеспечивает единообразие и простоту поддержки.
- Учитывайте совместимость с разными версиями Android, добавляя атрибуты из пространства имён
android:при необходимости.
Следуя этим рекомендациям, вы получите гибкое управление заголовками в вашем Android‑приложении, сохраняя при этом единый стиль и качество пользовательского интерфейса.