Android - создание полноэкранного режима со строкой состояния поверх него

Я хочу сделать свою деятельность полноэкранной со строкой состояния поверх нее, как на этой картинке:

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

Я использовал этот код в manifest внутри тега activity:

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

Но мой вид не начинается со строки состояния и выглядит так:

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

Как мне сделать так, чтобы мой activity выглядел как первый?


person Utshaw    schedule 20.04.2017    source источник
comment
сделать цвет строки состояния прозрачным и добавить fitsystemwindow=true в изображение и верхний макет   -  person Divyesh Patel    schedule 20.04.2017
comment
@Utshaw, у тебя есть решение? если да, то пожалуйста, помогите мне. требуют такой же реализации   -  person Anjali Tripathi    schedule 13.10.2017


Ответы (10)


Я знаю, что парень, задающий вопрос, возможно, нашел свое собственное решение, но для людей, которые все еще ищут решение, это очень простое решение, но у него есть ограничение до Kitkat, поэтому добавляется условие

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                      WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
person Vishwajit Palankar    schedule 27.03.2018
comment
@AsadMukhtar, к сожалению, нет - person Vishwajit Palankar; 28.05.2018
comment
Как мне добиться этого на pre kitkat? - person Asad Mukhtar; 28.05.2018
comment
@AsadMukhtar Я думаю, вам следует погуглить об иммерсивном полноэкранном режиме. - person Vishwajit Palankar; 29.05.2018
comment
Вы хотите ContextMenu с иконками? Woops уходит из экрана. Вы хотите, чтобы клавиатура регулировала размер? ХАХАХА НЕТ! С OnApplyWindowInsetsListener это работает как шарм, но вызывает проблемы в других частях. - person Alpha; 02.11.2018
comment
Прекрасно работает! Удаление других тем с прерыванием этого кода сработало. - person March3April4; 20.11.2018
comment
Экран не прокручивается после реализации приведенного выше фрагмента. - person Sunil; 10.12.2018
comment
К сожалению, не работает на Android 29, панель навигации появляется поверх представлений. - person BekaBot; 01.07.2019
comment
Извините @BekaBot за это, я проверю и посмотрю, есть ли здесь альтернатива - person Vishwajit Palankar; 01.07.2019
comment
Он работает, но нижний вид навигации уходит за панель навигации - person Kishan Solanki; 11.07.2019
comment
Одна проблема с этим заключается в том, что он также перекрывает кнопку навигации внизу. - person Ashutosh Sagar; 21.07.2019
comment
@AshutoshSagar, как сделать вышеперечисленную навигацию? - person b devloper; 12.09.2019
comment
Я хочу, чтобы это было похоже на тикток, который находится над панелью навигации. Итак, как этого добиться? - person b devloper; 12.09.2019
comment
@bdevloper, вы хотите, чтобы он также закрывал панель навигации, верно? - person Vishwajit Palankar; 16.09.2019
comment
Ни у кого не было проблем с прокруткой при использовании этого?????????? - person Biswas Khayargoli; 03.08.2020

Добавьте их в свою базовую тему приложения в styles.xml.

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

И добавьте следующий атрибут в родительский макет:

android:fitsSystemWindows="false"

Надеюсь это поможет.

person tahsinRupam    schedule 20.04.2017
comment
и повлияет на каждое действие - person toshkinl; 12.01.2018
comment
android:fitsSystemWindows=”true”, у меня это не работает. - person AJit; 08.02.2018
comment
Работает, только если я НЕ использую android:fitsSystemWindows=true - person Zeon; 16.11.2018
comment
Должно быть android:fitsSystemWindows=false. Я разместил редактирование, ожидая проверки сейчас. В противном случае это правильный ответ. - person wessel; 23.01.2019
comment
используя: ' ‹item name=android:windowTranslucentNavigation›true‹/item›' также закрывает нижнюю панель навигации, - person Karan Sharma; 18.02.2020

Если вы не хотите, чтобы ваша «Прозрачная навигация» была прозрачной, вот код, который просто сделает прозрачной строку состояния.

В вашей теме:

    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowTranslucentStatus">true</item>

В вашей деятельности onCreate:

Window window = getWindow();
WindowManager.LayoutParams winParams = window.getAttributes();
winParams.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
window.setAttributes(winParams);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
person Pablo Cegarra    schedule 30.09.2017
comment
сэкономил мое время, искал это часами. +1 - person amit pandya; 14.02.2018
comment
не работает для меня. мой контент находится за панелью навигации - person Siddhesh; 28.08.2018
comment
Как изменить цвет текста и значка? по умолчанию он черный - person viper; 10.09.2019
comment
@bdevloper сейчас не помню. даже не помню, для чего я это искал. - person Siddhesh; 15.10.2019
comment
Код Kotlin: val window: Window = window val winParams: LayoutParams = window.attributes winParams.flags = winParams.flags и LayoutParams.FLAG_TRANSLUCENT_STATUS.inv() window.attributes = winParams window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE или View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - person Karan Sharma; 18.02.2020

1. Прозрачная строка состояния

window?.decorView?.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
window.statusBarColor = Color.TRANSPARENT

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

2. Прозрачная строка состояния и нижняя навигационная панель

    window.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
    );

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

3. Скрыть строку состояния

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        window.insetsController?.hide(WindowInsets.Type.statusBars())
    }
    else {
        @Suppress("DEPRECATION")
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
    }

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

4. Скрыть панель Statubar и нижнюю панель навигации

val actionBar: ActionBar? = supportActionBar
          if (actionBar != null) actionBar.hide()
         window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)

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

куда вставить этот код?

   override fun onCreate(savedInstanceState: Bundle?) {

        /*  Put above code here ..... */
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_slider)
   }

Примечание

  • Я проверил этот код в эмуляторе Pixel 3A.
  • Возможно, настроить ОС Android не поддерживает
  • установить стиль <style name="Theme.FullScreen" parent="Theme.MaterialComponents.DayNight.NoActionBar">
person Sanjayrajsinh    schedule 05.03.2021

Попробуйте так

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

Надеюсь, этот поможет

person Sumaniya Alabha    schedule 20.04.2017

В Kotlin просто используйте следующий код в своей деятельности, а также добавьте android:fitsSystemWindows=true в родительский вид файла макета activity.xml. Это также будет отображать содержимое на панели навигации, если вы объявили полноэкранный стиль в своем стиле.xml

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
     window.setFlags(
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        )
    }
person hdk loh    schedule 08.12.2020

поместите ниже кода внутри onCreate()

private void setStatusBarTransparent() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

        View decorView = window.getDecorView();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        } else {
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }
        window.setStatusBarColor(Color.TRANSPARENT);
    }
}
person MinhKhang    schedule 12.04.2021

вы можете использовать этот код после onCreate

   setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }

ваша активность будет полноэкранной со строкой состояния :)

person Mostafa Pirhayati    schedule 09.01.2018

Поместите этот код в свою активность onCreate, это скроет строку состояния.

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
person Ghanshyam Sharma    schedule 20.04.2017

Ответ @tahsinRupam правильный и протестирован на пост-версии Kitkat.

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

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

<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:theme="@style/Activity.Fullscreen.Theme" />

<style name="Activity.Fullscreen.Theme" parent="MyMaterialTheme.Base">  
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

Поддерживаю оригинал @tahsinRupam

Счастливого кодирования Ура!

person ralphgabb    schedule 20.09.2018