Полноэкранная тема для 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" 
/>
nebyan
источник
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 (), потому что если вы выходите из приложения и затем снова открываете его, панель действий остается активной! (и так это решит проблему)

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

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

Ваш «обходной путь» (скрытие панели действий самостоятельно) - это нормальный путь. Но Google рекомендует всегда скрывать панель действий, когда заголовок скрыт. Посмотрите здесь: https://developer.android.com/training/system-ui/status.html

симулянт
источник
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>
vntstudy
источник
Только это решение фактически скрывает строку заголовка и делает ее полностью полноэкранной. Должен быть отмечен как правильное решение. Спасибо!
Дарко Максимович
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, представленные в этой теме, я мог скрыть только строку состояния, но не панель навигации.

Darush
источник
1
Спасибо, это единственный, кто скрывает панель навигации! Очень рекомендую этот ответ.
Махаркус
2
requestWindowFeature(Window.FEATURE_NO_TITLE);
prashantwosti
источник
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>
DysaniazzZ
источник
1

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }
Andoctorey
источник
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>
Xan
источник
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>
Реза Хамзехей
источник