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

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

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

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

Ответы [ 35 ]

1037 голосов
/ 07 апреля 2010

Сделайте это по вашему 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.

509 голосов
/ 20 сентября 2010

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

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

или используйте android:theme="@android:style/Theme.Black.NoTitleBar", если вам не нужен полноэкранный режим.

Примечание: Если вы ранее использовали представление по умолчанию, вам, вероятно, также следует изменить родительский класс с AppCompatActivity на Activity.

377 голосов
/ 13 апреля 2010

Я сейчас сделал следующее.

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

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

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

Чтобы применить стиль к определенному действию, откройте AndroidManifest.xml и добавьте следующий атрибут в тег activity;

<activity
    android:theme="@style/generalnotitle">
164 голосов
/ 02 января 2013

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

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

В вашей папке 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>

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

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

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

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

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

100 голосов
/ 20 марта 2012

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

В файле manifest.xml:

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

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

    <activity android:theme="@android:style/Theme.Black.NoTitleBar">
    
49 голосов
/ 16 января 2015

правильный ответ, вероятно, состоит в том, чтобы не расширять ActionbarActivity, а расширять просто Activity


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

@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 {

Активность или FragmentActivity

public class MainActivity extends Activity  {

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

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

это пример стиля совместимости дизайна материалов.

43 голосов
/ 17 октября 2011

Если вы используете 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>к этому.

34 голосов
/ 24 октября 2016

что у меня работает:

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">
    
22 голосов
/ 11 июня 2016

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

Лучшим решением для меня было использовать следующее:

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

Больше нет заголовка / строки заголовка. Просто поместите его в <application>...</application> или <activity>...</activity> в зависимости от того, хотите ли вы (не) его использовать во всем приложении или просто в конкретном упражнении.

17 голосов
/ 21 декабря 2012

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

 <!-- 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...