2015-10-26 3 views
25

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

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

+7

Вы нашли решение? –

+0

Я также был бы заинтересован в решении, до сих пор я ничего не нашел ... – bazinac

+0

Не могли бы вы разместить изображение своего текущего и ожидаемого поведения? – FAT

ответ

3

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

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

    } 

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

6
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 
+0

Проблема здесь в том, что по-прежнему существует контент под навигацией ... – bazinac

0

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

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

<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"/> 
+0

Это решение выполняет описанную работу. Панель навигации непрозрачна, и под ней нет контента. – samurdhilbk

0

с использованием mikepenz's comment

, что я точно работаю с кодом (преобразованный в kotlin) ниже.

// 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) 
} 
Смежные вопросы