Повноекранна тема для 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"
Наведіть курсор Ruan

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

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

це також ховає рядок стану :(
Омама

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, чому ваше рішення не працює, і це працює для мене? В чому причина?
ахмет

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

Він повинен бути батьківським = "@ 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, і NaviBar.

<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.