Подтвердить что ты не робот

Могу ли я установить FLAG_LAYOUT_NO_LIMITS только для строки состояния?

Мне нужно сделать прозрачную строку состояния. Я использую getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS), и это строка состояния, как я хочу. Но это также влияет на панель навигации: она стала прозрачной, а getWindow().setNavigationBarColor(Color.BLACK) ничего не делать.

Есть ли способ сделать только прозрачную панель состояния, а не панель навигации?

4b9b3361

Ответ 1

эта работа для меня

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

styles.xml

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

v21\styles.xml

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

строка состояния будет прозрачной или полупрозрачной, панель навигации не будет

надеюсь это поможет!

Ответ 2

используя комментарий mikepenz

Какой у меня точно рабочий код (преобразованный в котлин) ниже здесь.

// at AppCompatActivity, min SDK is 16, I tested api 25
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    }
    if (Build.VERSION.SDK_INT >= 19) {
        window.decorView.systemUiVisibility =
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    }
    if (Build.VERSION.SDK_INT >= 21) {
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = Color.TRANSPARENT
    }

    setContentView(R.layout.activity_main)
}

Ответ 3

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

Ответ 4

Прокрутите вниз, чтобы проверить, как выглядит конечный результат

Прежде всего, определите ваш файл styles.xml как this-

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
</style>

НЕ добавляйте следующую строку

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

Добавление строки выше НЕ сместит макет вверх, когда программная клавиатура отображается в диалоге с EditText

Затем переопределите этот стиль в стилях v21 и v23, например this-

v21/styles.xml

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

v23/styles.xml

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

Код деятельности - Котлин

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(
            LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    setContentView(R.layout.YOUR_LAYOUT_RESOURCE_ID)
    .
    .
.
}

Код активности - Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(
            LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    setContentView(R.layout.YOUR_LAYOUT_RESOURCE_ID)
    .
    .
    .
}

Конечный результат End result

Ответ 5

fun showTransparentStatusbar() {
        activity!!.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }


    fun removeStatusbarFlags() {
        activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }

Ответ 6

Вы можете использовать это для скрытия строки состояния и панели навигации

WindowManager.LayoutParams attributes = getWindow().getAttributes();
    attributes.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    getWindow().setAttributes(attributes);

и для отображения навигации снова используйте этот

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

    }

цвет серый для меня, возможно, вы можете заставить его использовать свой основной цвет

Ответ 7

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

Просто флаг выше работал для меня. Кнопки навигации видны, строка состояния и панель действий скрыты.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

Не работает. Тестовое устройство Nexus 5.

Ответ 8

я нашел решение bro

<style name="transparent" parent="Theme.AppCompat.Light.NoActionBar">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    //Other styling(optional)
</style>

а затем примените эту прозрачную тему к манифесту активности, подобному этому

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

Ответ 9

да, этот код можно использовать в Style.xml

<style name="transparent" parent="Theme.AppCompat.Light">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat

    <item name="colorPrimaryDark">#00000000</item>//THIS is the important part.
    //Other styling(optional)
</style>

Затем, чтобы применить его к вашему макету, просто добавьте следующую строку в корневой макет (представление):

android:theme="@style/transparent"

Ответ 10

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

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

Ответ 11

Это работает на Samsung S10+ (Pie), Oppo F7 и Oppo F5S (Oreos):

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

По просьбе автора постера область приложения расширяется сверху и закрывает строку состояния (там, где часы). Но навигационные (виртуальные) кнопки андроида остаются внизу экрана, а приложение располагается поверх кнопок андроида.