Как скрыть строку заголовка для Activity в XML с существующей пользовательской темой

Я хочу скрыть заголовок для некоторых моих действий. Проблема в том, что я применил стиль ко всем моим действиям, поэтому я не могу просто задать тему для @android: style / Theme.NoTitleBar.

Использование темы NoTitleBar в качестве родителя для моего стиля приведет к удалению заголовка для многих действий.

Могу ли я установить элемент стиля без названия?

Solutions Collecting From Web of "Как скрыть строку заголовка для Activity в XML с существующей пользовательской темой"

Сделайте это в onCreate() .

 //Remove title bar this.requestWindowFeature(Window.FEATURE_NO_TITLE); //Remove notification bar this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //set content view AFTER ABOVE sequence (to avoid crash) this.setContentView(R.layout.your_layout_name_here); 

this относится к Activity .

Вы можете изменить свой AndroidManifest.xml :

 <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 

Вы можете использовать это для каждого вида деятельности в своем проекте.

Теперь я сделал следующее.

Я объявила стиль, наследующий все, от моего общего стиля, а затем отключив titleBar.

 <style name="generalnotitle" parent="general"> <item name="android:windowNoTitle">true</item> </style> 

Теперь я могу установить этот стиль для каждого Activity, в котором я хочу скрыть панель заголовка, переписывая стиль приложения в целом и наследуя всю информацию о других стилях, в связи с чем дублирование кода стиля не происходит.

Мне не нравится this.requestWindowFeature(Window.FEATURE_NO_TITLE); Потому что строка заголовка появляется ненадолго, а затем исчезает.

Мне также не нравится android:theme="@android:style/Theme.NoTitleBar" потому что я потерял все изменения 3.0 + Holo, к которым привыкли пользователи новых устройств. Поэтому я столкнулся с этим решением.

В папке res / values создайте файл с именем styles.xml (если он еще не существует). В этом файле введите следующий код:

 <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Default" parent="@android:style/Theme"></style> <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style> <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style> </resources> 

Затем создайте res / values-v11 с другим файлом styles.xml (снова это может уже существовать). В этом файле введите следующий код:

 <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Default" parent="@android:style/Theme.Holo"></style> <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style> <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style> </resources> 

И если вы ориентируетесь на 4.0+, создайте папку res / values-v14 с еще одним файлом styles.xml (да, возможно, он уже существует). В этом файле введите следующий код:

 <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style> <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style> <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style> </resources> 

Наконец, при создании всех этих файлов откройте файл AndroidManifiest.xml, который вы можете добавить:

 android:theme="@style/Theme.NoTitle" 

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

Теперь ваши пользователи получат темы, связанные с их версией устройства, с желаемым расположением экрана.

PS Изменение значения для android:theme="@style/Theme.FullScreen" будет иметь тот же эффект, но также удалить панель уведомлений.

Строку заголовка можно удалить двумя способами, как указано на странице разработчика Android:

В файле manifest.xml :

  1. Добавьте в application следующее, если вы хотите удалить его для всех действий в приложении:

     <application android:theme="@android:style/Theme.Black.NoTitleBar"> 
  2. Или для конкретной деятельности:

     <activity android:theme="@android:style/Theme.Black.NoTitleBar"> 

Если вы используете this.requestWindowFeature(Window.FEATURE_NO_TITLE) пользователь все равно сможет увидеть строку заголовка на мгновение во время анимации запуска, когда активность начнется через onCreate . Если вы используете @android:style/Theme.Black.NoTitleBar как показано ниже, строка заголовка не будет отображаться во время анимации запуска.

 <activity android:name=".MainActivity" android:label="My App" android:theme="@android:style/Theme.Black.NoTitleBar" android:screenOrientation="portrait"> 

Выше пример, очевидно, переопределит вашу существующую тему приложения, если у вас есть существующая тема, добавьте к ней <item name="android:windowNoTitle">true</item> .

Правильный ответ, вероятно, заключается в том, чтобы не расширять ActionbarActivity, а расширять только активность


Если вы все еще используете активность в действии, похоже, это работает:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); //<< this setContentView(R.layout.activity_main); } 

Похоже, это тоже работает:

 styles.xml: <style name="AppBaseTheme" parent="Theme.AppCompat.Light" > <item name="android:windowNoTitle">true</item> <!-- //this --> </style> 

Я мог бы сделать так, как писал Скотт Биггс. Таких работ. Кроме темы нет. Я имею в виду, что фон меню настроек прозрачен:

Просто измените

 public class MainActivity extends ActionBarActivity { 

К активности или фрагментации

 public class MainActivity extends Activity { 

Однако я мог бы сделать его достаточно хорошим, используя конструкцию материалов, и не удалять панель действий: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. Установить значок приложения
  2. Установить цвета панели действий в соответствии с дизайном.
  3. Установить значок в меню настроек
  4. Добавить больше значков (кнопки сверху)

Это на примере стиля панели управления совместимостью материалов.

Создайте тему, как показано ниже.

  <!-- Variation on the Light theme that turns off the title --> <style name="MyTheme" parent="android:style/Theme.Black"> <item name="android:windowNoTitle">true</item> </style> 

Добавить

<item name="android:windowNoTitle">true</item>

Внутри AppTheme (styles.xml)

Просто используйте getActionBar().hide(); В вашем основном onCreate() .

Что работает для меня:

1- в styles.xml:

  <style name="generalnotitle" parent="Theme.AppCompat.Light" > <item name="android:windowNoTitle">true</item> <!-- //this --> </style> 

2- в MainActivity

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); //<< this setContentView(R.layout.activity_main); } 
  1. В манифесте наследуют стиль:

    <Activity android: name = ". MainActivity" android: theme = "@ style / generalnotitle">

Вы можете использовать этот код в своем java-файле

Добавьте эту строку до того, как вы установите или загрузите представление

 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); 

Добавьте оба те для темы, которую вы используете:

  <item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item> 

В методе onCreate используйте следующий фрагмент:

 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

Вам просто нужно изменить стиль AppTheme в Style.xml, если вы замените определение DarkActionBar

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

NoActionBar в NoActionBar

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 

AppTheme, определенный в AndroidManifast.xml

Или если вы хотите скрыть / показать строку заголовка в любой момент:

 private void toggleFullscreen(boolean fullscreen) { WindowManager.LayoutParams attrs = getWindow().getAttributes(); if (fullscreen) { attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; } else { attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; } getWindow().setAttributes(attrs); } 

Когда я пытался использовать все эти высокие ответы, мое приложение всегда разбилось. (Я думаю, что это имеет какое-то отношение к «@android: style»?)

Лучшим решением для меня было следующее:

 android:theme="@style/Theme.AppCompat.NoActionBar" 

Нет заголовка / заголовка. Просто разместите его в <application>...</application> или <activity>...</activity> зависимости от того, хотите ли вы (не хотите) его в целом приложении или просто для определенного действия.

Добавьте этот стиль в свой файл style.xml

  <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> 

После этого ссылайтесь на это имя стиля в ваш androidManifest.xml в перкулярной деятельности, в котором вы не хотите видеть заголовок, как показано ниже.

 <activity android:name=".youractivityname" android:theme="@style/AppTheme.NoActionBar"> </activity> 

Первый ответ – амфибол. Вот мое объяснение: добавьте:

 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

В методе oncreate ().

до:

 super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); 

(Не только до setContentView), если этого не сделать, вы получите forceclose. +1 этот ответ.

В моем случае, если вы используете android studio 2.1, а ваша версия SDK для компиляции – 6.0, просто перейдите в файл manifest.xml и измените следующий код:

Вот код:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lesterxu.testapp2"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.NoActionBar"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

И вот стрелка снипета (см. Код подсветки): Введите описание изображения здесь

Я нашел две причины, почему эта ошибка может возникнуть.

Один. Флаги Window установлены уже в super.onCreate(savedInstanceState); В этом случае вы можете использовать следующий порядок команд:

 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); 

Два. У вас есть кнопка Back / Up внутри TitleBar, что означает, что текущая активность является иерархическим дочерним элементом другого действия, и в этом случае вам может onCreate прокомментировать или удалить эту строку кода внутри метода onCreate .

 getActionBar().setDisplayHomeAsUpEnabled(true); 

Вот как выглядит полный код. Обратите внимание на импорт android.view.Window.

 package com.hoshan.tarik.test; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); } } 

Я использую панель виджета поддержки v7. Итак, чтобы иметь возможность удалить или скрыть заголовок, нам нужно написать это.

 Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar); //Remove¡ing title bar getSupportActionBar().setDisplayShowTitleEnabled(false); 

Гм, вы можете применять темы к отдельным действиям в XML, например без названия. Другими словами, выньте его из своего тега приложения, откройте объявление тега и поместите его в желаемый тег активности.

Это решило мою проблему

В манифесте моей деятельности:

 <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".SplashScreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

В стиле под именем «AppTheme»:

 <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> **<item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item>** <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> 

Добавить в явный файл,

  android:theme="@android:style/Theme.Translucent.NoTitleBar" 

Добавьте следующую строку в ur java-файл,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

Если вы сделаете то, что говорят пользователи YaW и Doug Paul , то вам нужно иметь в виду, что перед вызовом setContentView необходимо установить функции окна. Если нет, вы получите исключение.

Просто измените родительский тег вашей темы приложения на «Theme.AppCompat.Light.NoActionBar»

Добавьте тему @ style / Theme.AppCompat.Light.NoActionBar в свою активность на AndroidManifest.xml, как это

 <activity android:name=".activities.MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> </activity> 

Есть упоминания об этом в этом посте, но никто явно не обращается к нему, поэтому, возможно, это спасет людей некоторое время. Если вы похожи на меня и имеете несколько классов, расширяющих один корневой класс, который расширяет ActionBarActivity, не может быть сразу очевидно, что попытка установить эту активность в NoTitleBar / NoActionBar вызовет ошибку, в частности:

«Вы должны использовать тему Theme.AppCompat (или потомок) с этим действием»

Вы можете исправить это, изменив extends на Activity.