2015-10-26 32 views
25

Ho bisogno di rendere la barra di stato trasparente. Sto usando getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) ed è fare barra di stato come voglio. Ma influisce anche sulla barra di navigazione: diventa trasparente e getWindow().setNavigationBarColor(Color.BLACK) non fare nulla.Posso impostare FLAG_LAYOUT_NO_LIMITS solo per la barra di stato?

C'è modo di rendere trasparente solo la barra di stato e non la barra di navigazione?

+7

Hai trovato la soluzione? –

+0

Sarei anche interessato alla soluzione, finora non ho trovato nulla ... – bazinac

+0

Puoi per favore postare un'immagine del tuo comportamento attuale e previsto? – FAT

risposta

3

È possibile utilizzare come questo per nascondere la barra di stato e la barra di navigazione

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

e per mostrare il navigationBar di nuovo utilizzare questo

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

    } 

il colore è grigio per me, forse è possibile forzare al tuo colore primario

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

Il problema è che c'è ancora del contenuto in navigazione ... – bazinac

0

sì, è possibile utilizzare questo codice 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> 

Poi per applicarlo al layout, è sufficiente aggiungere la seguente riga nel layout principale (vista):

android:theme="@style/transparent" 
1

ho trovato la soluzione di 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> 

e quindi applicare questo tema trasparente al manifest di attività come questo

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

Questa soluzione esegue il lavoro come descritto. La barra di navigazione è opaca e non contiene alcun contenuto. – samurdhilbk

0

utilizzando mikepenz's comment

quale codice esattamente funzionante (convertito in kotlin) qui sotto.

// 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) 
}