Повноекранна активність в Android?


Відповіді:


1050

Ви можете це робити програмно:

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

Або ви можете зробити це за допомогою свого AndroidManifest.xmlфайлу:

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

Редагувати:

Якщо ви використовуєте AppCompatActivity, вам потрібно додати нову тему

<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=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"/>

Дякуємо за https://stackoverflow.com/a/25365193/1646479


65
просто андроїд: topic = "@ android: style / Theme.NoTitleBar.Fullscreen" атрибуту вашої активності в маніфесті достатньо. Дякую :)
Praveen

19
Якщо ваш додаток використовує будь-яку іншу тему, використовуйте відповідну назву теми Напр. Для білої теми @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
ankitjaininfo

5
Встановлення теми в маніфесті спричиняє чорний екран при запуску, краще це зробити в коді.
aurelien_lepage

4
якщо ви використовуєте ActionBar і просто не хочете, щоб TitleBar видалив рядок `requestWindowFeature () ', оскільки це призведе до появи NullPointer в іншому випадку
X.X_Mass_Developer

3
Якщо ви користуєтесь AppCompatActivity, вам потрібно поставити requestWindowFeatureраніше super.onCreate. В іншому випадку ви отримаєте:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
Слав

128

Там є метод , званий Immersive Повноекранний режим доступний в KitKat . Демонстрація повноекранного режиму демонстрації

Приклад


5
Пам’ятайте лише про те, що «бульбашка-нагадування» відображатиметься вперше, коли ваша програма перейде в режим занурення. Це добре для деяких заходів, але це не так, наприклад, якщо ви робите заставку.
LarsH

перерви при використанні
спінерів

хочу приховати лише нижню панель навігації, а не рядок стану. Чи можна це зробити?
PvDev

76

Якщо ви не хочете використовувати тему, @android:style/Theme.NoTitleBar.Fullscreenоскільки ви вже використовуєте власну тему, ви можете використовувати її android:windowFullscreen.

В AndroidManifest.xml:

<activity
  android:name=".ui.activity.MyActivity"
  android:theme="@style/MyTheme">
</activity>

У styles.xml:

<style name="MyTheme"  parent="your parent theme">
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item> 
</style>

додати батька як свою батьківську тему
Saurabh Bhandari

вам теж потрібно розмістити <item name = "windowActionBar"> false </item>
htafoya

52

У файлі AndroidManifest.xml :

<activity
    android:name=".Launch"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <!-- This line is important -->

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>  

Або в коді Java :

protected void onCreate(Bundle savedInstanceState){
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

2
Ви повинні додати код, щоб це зробити програмно в JAVA
Dr. aNdRO

2
requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
iNFInite PosSibiLitiEs

хочу приховати лише нижню панель навігації, а не рядок стану. Чи можна це зробити?
PvDev

32

Якщо ви використовуєте AppCompat та ActionBarActivity, тоді використовуйте це

getSupportActionBar().hide();


Це не видалить рядок статусу вгорі
Manohar Reddy

24

Будьте обережні

requestWindowFeature(Window.FEATURE_NO_TITLE);

Якщо ви використовуєте будь-який метод для встановлення рядка дій таким чином:

getSupportActionBar().setHomeButtonEnabled(true);

Це призведе до виключення нульового вказівника.


Причина тому, що ви коригуєте панель дій, яку намагається приховати код зміни розміру!
Енді

22

Спробуйте це з appcompat від style.xml. Він забезпечує підтримку всіх платформ.

<!-- Application theme. -->
<style name="AppTheme.FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>


<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

приємне і просте рішення. Для новачків додайте цю тему в тег "Активність" або "Програма" в AndroidManifest.xml: android: topic = "@ style / AppTheme.FullScreen"
Leos Literak

1
хочу приховати лише нижню панель навігації, а не рядок стану. Чи можна це зробити?
PvDev

13

Використовувати Android Studio (поточна версія на даний момент 2.2.2) дуже просто додати активність на повноекранному екрані.

Дивіться кроки:

  1. Клацніть правою кнопкою миші на основний пакет Java> Виберіть "Нове"> Виберіть "Діяльність"> Потім натисніть "Діяльність на повноекранному екрані".

Крок перший

  1. Налаштуйте активність ("Назва активності", "Назва макета" тощо) та натисніть "Готово".

Крок другий

Готово!

Тепер у вас є повноекранна діяльність, яку легко зробити (див. Клас java та макет діяльності, щоб знати, як все працює)!


8

Для тих, хто використовує AppCompact ... style.xml

 <style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

Потім введіть ім’я у свій маніфест ...


7

Спочатку потрібно встановити тему програми за допомогою "NoActionBar", як показано нижче

<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

Потім додайте ці рядки у повноекранну діяльність.

public class MainActiviy extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

Він приховає панель дій / панель інструментів, а також панель стану у вашому повноекранному режимі


7

AndroidManifest.xml

<activity ...
          android:theme="@style/FullScreenTheme"
    >
</activity>

I. Ваша основна програма - тема Theme.AppCompat.Light.DarkActionBar

Для приховування ActionBar / StatusBar
style.xml

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

<style name="FullScreenTheme" parent="AppTheme">
    <!--this property will help hide the ActionBar-->
    <item name="windowNoTitle">true</item>
    <!--currently, I don't know why we need this property since use windowNoTitle only already help hide actionbar. I use it because it is used inside Theme.AppCompat.Light.NoActionBar (you can check Theme.AppCompat.Light.NoActionBar code). I think there are some missing case that I don't know-->
    <item name="windowActionBar">false</item>
    <!--this property is used for hiding StatusBar-->
    <item name="android:windowFullscreen">true</item>
</style>

Щоб приховати панель навігації системи

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        setContentView(R.layout.activity_main)
        ...
    }
 }

II. Ваша основна тема програми - Theme.AppCompat.Light.NoActionBar

Для приховування ActionBar / StatusBar
style.xml

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

<style name="FullScreenTheme" parent="AppTheme">
    <!--don't need any config for hide ActionBar because our apptheme is NoActionBar-->
    <!--this property is use for hide StatusBar-->
    <item name="android:windowFullscreen">true</item> // 
</style>

Щоб приховати панель навігації системи

Подібні, як Theme.AppCompat.Light.DarkActionBar.

Демо


Дякую. Тестовано на Android 5.0.1.
CoolMind

@CoolMind зустрінемося знову. Дякую за вашу редакцію
Phan Van Linh

6

дякую за відповідь @ Крістіан я отримував помилку

android.util.AndroidRuntimeException: requestFeature () потрібно викликати перед додаванням вмісту

Я вирішив це за допомогою

@Override
protected void onCreate(Bundle savedInstanceState) {

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    super.onCreate(savedInstanceState);

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

    setContentView(R.layout.activity_login);

    -----
    -----
}

Ми повинні встановити requestWindowFeature(Window.FEATURE_NO_TITLE);раніше super.onCreate(savedInstanceState);?
CoolMind

4

показати Повномірне:

private void askForFullScreen()
    {
        getActivity().getWindow().getDecorView().setSystemUiVisibility(
                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 // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                        | View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

вийти з режиму повного занурення:

 private void moveOutOfFullScreen() {
        getActivity().getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }

3

Я хотів використовувати власну тему замість @android: style / Theme.NoTitleBar.Fullscreen. Але це не працювало, як тут згадував якийсь пост, тому я зробив кілька налаштувань, щоб зрозуміти це.

В AndroidManifest.xml:

<activity
    android:name=".ui.activity.MyActivity"
    android:theme="@style/MyTheme">
</activity>

У styles.xml:

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

Примітка: у моєму випадку мені довелося використовувати name="windowActionBar"замість цього, name="android:windowActionBar"перш ніж воно працювало належним чином. Тому я просто використовував обидва, щоб переконатися, що мені потрібно пізніше перенести нову версію Android.


3

Ось приклад коду. Ви можете вмикати / вимикати прапори, щоб приховати / показати конкретні деталі.

введіть тут опис зображення

public static void hideSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

Потім ви повернетесь до стану за замовчуванням :

введіть тут опис зображення

public static void showSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

Ви можете зателефонувати за вказаними вище функціями зі свого onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.course_activity);
    UiUtils.hideSystemUI(this);
}

3

КОТЛІН

Після google doc є простий спосіб:

override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) hideSystemUI() }


private fun hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
        // Set the content to appear under the system bars so that the
        // content doesn't resize when the system bars hide and show.
        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        // Hide the nav bar and status bar
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN)      }


// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private fun showSystemUI() {
window.decorView.systemUiVisibility = 
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)       }

Документи Google


2

ПОРАДА: Використання getWindow (). SetLayout () може викрутити весь екран! Зверніть увагу, що документація цього методу говорить:

Встановіть параметри компонування ширини та висоти вікна ... ви можете змінити їх на ... абсолютне значення, щоб зробити вікно, яке не є повноекранним.

http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29

Для своїх цілей я виявив, що мені потрібно використовувати setLayout з абсолютними параметрами, щоб правильно змінити вікно повного екрана. Більшість часу це спрацювало чудово. Його викликав подія onConfigurationChanged (). Однак був гикавка. Якщо користувач вийшов із програми, змінив орієнтацію та повторно повторився, це призведе до вимкнення мого коду, який включав setLayout (). Під час цього вікна часу повторного входу моє рядок стану (яке було приховано маніфестом) буде повторно показано, але в будь-який інший час setLayout () цього не спричинить! Рішення полягало в тому, щоб додати додатковий виклик setLayout () після виклику з жорсткими значеннями:

       public static void setSize( final int width, final int height ){
//DO SOME OTHER STUFF...
            instance_.getWindow().setLayout( width, height );
            // Prevent status bar re-appearance
            Handler delay = new Handler();
            delay.postDelayed( new Runnable(){ public void run() {
                instance_.getWindow().setLayout(
                    WindowManager.LayoutParams.FILL_PARENT,
                    WindowManager.LayoutParams.FILL_PARENT );
            }}, FILL_PARENT_ON_RESIZE_DELAY_MILLIS );
        }

Потім вікно було повторно змінено, і рядок стану не з’явився повторно незалежно від події, яка спричинила це.


2
 @Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    adjustFullScreen(newConfig);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        adjustFullScreen(getResources().getConfiguration());
    }
}
private void adjustFullScreen(Configuration config) {
    final View decorView = getWindow().getDecorView();
    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        decorView.setSystemUiVisibility(
                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
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    } else {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    }
}

2

Всередині стилів.xml ...

<!-- No action bar -->
<style name="NoActonBar" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Theme customization. -->
    <item name="colorPrimary">#000</item>
    <item name="colorPrimaryDark">#444</item>
    <item name="colorAccent">#999</item>
    <item name="android:windowFullscreen">true</item>
</style>

Це працювало для мене. Сподіваюся, що це допоможе.


2

З Котлин це так, як я зробив:

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        window.decorView.systemUiVisibility =
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_FULLSCREEN

    }
}

Режим занурення

Режим занурення призначений для додатків, у яких користувач буде сильно взаємодіяти з екраном. Приклади - ігри, перегляд зображень у галереї чи читання сторінки, що зберігається, як-от книга чи слайди в презентації. Для цього просто додайте ці рядки:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

Sticky занурення

У звичайному режимі занурення кожен раз, коли користувач провела з краю, система піклується про виявлення системних панелей - ваш додаток навіть не буде знати, що цей жест відбувся. Отже, якщо користувачеві може бути потрібно провести пальцем з краю екрана як частина основного досвіду роботи додатка - наприклад, під час гри, яка потребує великого перенесення або використання програми для малювання - замість цього слід увімкнути режим "липкого" занурення. .

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

Для отримання додаткової інформації: Увімкніть режим повноекранного режиму

Якщо ви користуєтесь клавіатурою, іноді буває, що StatusBar відображається, коли з'являється клавіатура. У такому випадку я зазвичай додаю це до мого стилю xml

styles.xml

<style name="FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>

А також цей рядок до мого маніфесту

<activity
        android:name=".ui.login.LoginActivity"
        android:label="@string/title_activity_login"
        android:theme="@style/FullScreen">

Дякую. Потрібен API 16 та 19.
CoolMind

2

Просто вставте цей код у onCreate()метод

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

1

Це працювало для мене.

if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } else {
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
    }

1
В іншому було б краще використовувати наступне: getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_FULLSCREEN);
Протонфлюкс

1
 protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_splash_screen);
    getSupportActionBar().hide();

}

1

Через багато часу, не маючи успіху, я прийшов із власним рішенням, яке подібне до іншого розробника. Так що якщо комусь потрібно їй це is.My проблема в тому, що навігаційна система бар не ховається після виклику. Також у моєму випадку мені знадобився пейзаж, тому про всяк випадок прокоментуйте цей рядок і все. Перш за все створити стиль

    <style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>

Це мій файл маніфесту

<activity
        android:name=".Splash"
        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:screenOrientation="landscape"
        android:label="@string/app_name"
        android:theme="@style/FullscreenTheme">
    </activity>

Це моя спалш-діяльність

public class Splash extends Activity {
/** Duration of wait **/
private final int SPLASH_DISPLAY_LENGTH = 2000;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.splash_creen);

    /* New Handler to start the Menu-Activity
     * and close this Splash-Screen after some seconds.*/
    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            /* Create an Intent that will start the Menu-Activity. */
            Intent mainIntent = new Intent(Splash.this,MainActivity.class);
            Splash.this.startActivity(mainIntent);
            Splash.this.finish();
        }
    }, SPLASH_DISPLAY_LENGTH);
}

}

І це моя основна повна екранна діяльність. onSystemUiVisibilityChange цей метод залишається важливим, інакше основна навігаційна панель Android після виклику залишиться і більше не зникне. Дуже дратує проблему, але ця функція вирішує цю проблему.

MainActivity публічного класу розширює AppCompatActivity {

private View mContentView;
@Override
public void onResume(){
    super.onResume();

    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

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

    setContentView(R.layout.fullscreen2);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null)
    {
        actionBar.hide();
    }
    mContentView = findViewById(R.id.fullscreen_content_text);
    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);



    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener()
            {
                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    System.out.println("print");

                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                | View.SYSTEM_UI_FLAG_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
                    }
                    else
                    {

                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

                        }
                }
            });

}

}

Це мій макет екрана:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="@android:color/white"
        android:src="@drawable/splash"
        android:layout_gravity="center"/>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, splash"/>
</LinearLayout>

This is my fullscreen layout
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0099cc"
        >
        <TextView
            android:id="@+id/fullscreen_content_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:keepScreenOn="true"
            android:text="@string/dummy_content2"
            android:textColor="#33b5e5"
            android:textSize="50sp"
            android:textStyle="bold" />

    </FrameLayout>

Я сподіваюся, що це вам допоможе


1

https://developer.android.com/training/system-ui/immersive.html

Діяльність:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        decorView.setSystemUiVisibility(
                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
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

AndroidManifests:

 <activity android:name=".LoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_login"
            android:theme="@style/FullscreenTheme"
            ></activity>

1

Створіть порожню активність та додайте до неї два рядки onCreate.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // full screen activity
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();

        setContentView(R.layout.activity_main);
    }
    ...
}

1

Використовуйте цей метод після setContentView в onCreate () та передайте об'єкт Window через getWindow () .

    public void makeActivityFullScreen(Window window){
    View decorView = window.getDecorView();
    //        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
       window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    }
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    );
}

Цей код також буде працювати для екрана на виїмку. Щоб перевірити повноекранний звуковий екран, вам потрібен android P, але якщо у вас є чітко виражений телефон, тоді перейдіть до налаштування -> Налаштування дисплея -> співвідношення дисплея додатка ---> виберіть додаток ---> буде два безпечні варіанти: дисплей і повний екран, будь ласка, виберіть весь екран і запустіть додаток, ви можете побачити повноекранний екран на висічці також, не маючи андроїд пиріг


1

Щоб зробити свою діяльність на весь екран, виконайте це:

    // add following lines before setContentView
    // to hide toolbar
                if(getSupportActionBar()!=null)
                    getSupportActionBar().hide();
    //to hide status bar
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

Це приховає панель інструментів і рядок стану.

Але в деяких випадках, можливо, ви захочете показати рядок стану з прозорим фоном, у такому випадку зробіть це:

// add following lines before setContentView
// to hide toolbar
if(getSupportActionBar()!=null)
   getSupportActionBar().hide();
// to make status bar transparent
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

Деякі інші альтернативи для приховування панелі інструментів замість getSupportActionBar().hide():

  1. Видаліть панель інструментів, змінивши батьківську тему додатка:

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

  1. Якщо ви хочете видалити панель інструментів лише з однієї активності, перейдіть до маніфесту, під тегом діяльності додайте це: android:theme="@style/Theme.AppCompat.Light.NoActionBar"

Чому для любителів Kotlin , чому б не використовувати функції розширення:

Для першого випадку:

fun AppCompatActivity.makeItFullScreenStatusBarVisible(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

І зателефонуйте до цього setContentView:

makeItFullScreenStatusBarVisible()

Для другого:

fun AppCompatActivity.makeItFullScreenStatusBarHidden(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}

І зателефонуйте раніше setContentView:

makeItFullScreenStatusBarHidden()

0

На Android 10 мені ніхто не працював.

Але я працював прекрасно (1-й рядок у oncreate):

    View decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE;
    decorView.setSystemUiVisibility(uiOptions);

    setContentView(....);

    if (getSupportActionBar() != null) {
        getSupportActionBar().hide();
    }

насолоджуйтесь :)


0

Відображення вмісту через висічку або область вирізу. У цьому можуть допомогти документи:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - Вміст виводиться на область вирізу в портретному та пейзажному режимах.

Ключовою для мене була ця лінія в стилі діяльності:

// Important to draw through the cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 

Для мене я хотів показати зображення в режимі занурення. Коли я натискаю на нього, я хочу, щоб системний інтерфейс (панелі стану та навігації) відображався.

Ось моє рішення:

1- У розділі "Діяльність" деякі способи показу / приховання інтерфейсу користувача (смуги стану / навігації)

private fun hideSystemUI() {
    sysUIHidden = true
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
            // Hide the nav bar and status bar
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // Hide nav bar
            or View.SYSTEM_UI_FLAG_FULLSCREEN // Hide status bar
            )
}


private fun showSystemUI() {
    sysUIHidden = false
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // layout Behind nav bar
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // layout Behind status bar
            )
}

2- Переконайтесь, що це в кореневому вікні вашого формату xml

android:fitsSystemWindows="false"

3- Стиль для повноекранної активності надасть смугам статусу / навігації напівпрозорий фон, коли вони з'являються:

<style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    <item name="android:statusBarColor">#50000000</item>
    <item name="android:navigationBarColor">#50000000</item>
    // Important to draw behind cutouts
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 
</style>

<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/sysTransparent</item>
</style>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.