Полноэкранная тема для AppCompat


304

Я хотел бы знать, как я могу применить полноэкранную тему (без строки заголовка + без панели действий) к деятельности. Я использую библиотеку AppCompat из пакета поддержки v7.

Я пытался применить android:theme="@android:style/Theme.NoTitleBar.Fullscreen"к моей конкретной деятельности, но она потерпела крах. Я думаю, это потому, что моя тема приложения такая.

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

Я тоже пробовал это

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

которая скрывает только строку заголовка, но не панель действий. Мой нынешний способ это скрыть панель действий с

getSupportActionBar().hide();

Ответы:


836

Когда вы используете Theme.AppCompat в своем приложении, вы можете использовать FullScreenTheme, добавив приведенный ниже код в стили.

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

а также упомянуть в вашем файле манифеста.

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

67
Родительский стиль должен быть «Theme.AppCompat.Light.NoActionBar»
Руан

3
На самом деле, достаточно добавить это в XML-файл стиля: <item name = "android: windowFullscreen"> true </ item>. Видимость панели действий (строки заголовка) можно отдельно контролировать с помощью методов .hide / .show во время выполнения.
Амин

2
FEATURE_NO_TITLE не был удостоен чести. Не знаю, какая разница, но я наконец изменил свою активность, чтобы расширить Activity вместо AppCompatActivity, и мой тот же код сработал (к счастью, мне не нужен AppCompat): this.requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE | Посмотреть.
user888867

это скрывает и строку состояния :(
Omama

3
Я хотел бы добавить hideNavigation()в onResume()- без этого, панель навигации была еще видна в моем приложении (API 18+)
Антеки

69

Основываясь на ответе @nebyan, я обнаружил, что панель действий все еще не скрывается.

Следующий код работает для меня:

<style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

и, конечно же, не забыл отредактировать ваш AndroidManifestфайл.

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@nebyan, почему ваше решение не работает, и это работает для меня? Какова причина?
Ahmet

1
не нужно устанавливать, <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>если ваша тема включает в себя.NoActionBar
user924

19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

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


12

Проблемы возникают до и после версий Android 4.0 (уровень API 14).

из здесь я создал свое собственное решение.

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

Я пишу этот код в методе onResume (), потому что если вы выходите из приложения и затем снова открываете его, панель действий остается активной! (и так это решит проблему)

Я надеюсь, что это было полезно;)


Обратите внимание, что если пользователь вручную вытянет строку состояния, она не будет скрыта. Что еще хуже, если отображается программная клавиатура, автоматически отображается строка состояния, которая снова не скрывается.
Хендра Анггриан


7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}

5

Вы можете следовать ниже шаг:

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

Я надеюсь, что это поможет .. Спасибо!


4

Это должно быть parent = "@ style / Theme.AppCompat.Light.NoActionBar"

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" 
parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

Только это решение фактически скрывает строку заголовка и делает ее полностью полноэкранной. Должен быть отмечен как правильное решение. Спасибо!
Дарко Максимович

3

Чтобы скрыть как строку состояния, так и панель действий, и сделать свою деятельность полноэкранной, используйте следующий код в своей деятельности onResume()или onWindowFocusChanged()методе:

@Override
protected void onResume() {
    super.onResume();
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

Вы можете найти больше информации по следующим ссылкам:

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


1
Спасибо, это единственный, кто скрывает панель навигации! Очень рекомендую этот ответ.
Махаркус


2

Эта тема работает только после API 21 (в комплекте). И сделайте и StatusBar, и NavigationBar прозрачными.

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>

1

Чтобы удалить строку заголовка в AppCompat:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }

1

Вы можете попробовать следующее :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>

0
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>


1
Пожалуйста, объясните код, если вы его предоставите, он поможет понять ваш код и может помочь понять будущие проблемы.
Лепидоптерон

0

просто это ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>

0

Просто парни на ваш стиль:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.