it-swarm.com.ru

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

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

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

37
BArtWell

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

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>

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

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

11
Chorld
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
10
ScuAdam

используя комментарий 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)
}
6
mgcation

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

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);

    }

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

3
Riadh Madridista

я нашел решение, братан

<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"/>
1
Robokishan
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

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

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

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

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


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

да, вы можете использовать этот код в 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"
0
Idrish Multani