50

Sto setacciando l'interwebs (ad esempio documentazione di Android, risposte qui, ecc.) Per la risposta a ciò che pensavo sarebbe stata una domanda abbastanza banale. Come si ottiene una barra di azione traslucida come quella di Google Music e YouTube (i collegamenti sono esempi di immagini)?Action Android traslucido personalizzatoBar

Desidero che il contenuto video sia a schermo intero e non limitato/premuto dalla barra delle azioni, sfruttando comunque i vantaggi di un componente UI integrato. Ovviamente posso usare una vista completamente personalizzata, ma preferirei sfruttare l'ActionBar se possibile.

manifesto

<activity 
    android:name="videoplayer" 
    android:theme="@android:style/Theme.Holo" 
    android:launchMode="singleTop" 
    android:configChanges="keyboardHidden|orientation"/> 

Attività

// Setup action bar 
ActionBar actionBar = getActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
View customActionBarView = getLayoutInflater().inflate(R.layout.player_custom_action_bar, null); 
actionBar.setCustomView(customActionBarView, 
         new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, 
                R.dimen.action_bar_height)); 
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

Menu

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/button1" 
     android:icon="@drawable/button1" 
     android:showAsAction="always"/> 

    <item 
     android:id="@+id/button2" 
     android:icon="@drawable/button2" 
     android:showAsAction="always"/> 
</menu> 

personalizzato ActionBar View

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/custom_action_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:gravity="center" 
    android:background="@color/TranslucentBlack"> 

    <!--Home icon with arrow--> 
    <ImageView 
     android:id="@+id/home" 
     android:src="@drawable/home" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent"/> 

    <!--Another image--> 
    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:visibility="visible"/> 

    <!--Text if no image--> 
    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:visibility="gone"/> 

    <!--Title--> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:paddingLeft="20dp" 
     android:gravity="center_vertical"/> 
</LinearLayout> 
+0

risposta qui: http://stackoverflow.com/questions/16939814/android-util-androidruntimeexception-requestfeature-must-be-called-before-add – user3167086

risposta

100

Se si desidera la vostra attività da fullscreen ma mostrano ancora un'ActionBar, ma con un alfa è necessario richiedere overlaymode per l'ActionBar in onCreate() della vostra attività:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

//getWindow().requestFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY); << Use this for API 7+ (v7 support library) 

Quindi dopo chiami setContentView(..) (dal setContentView(..) inizializza anche la barra di azione accanto all'impostazione del contenuto) puoi impostare uno sfondo disegnabile sulla barra delle azioni:

getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg)); 

che può essere un disegnabile forma con un alfa messo in res/drawable:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#BB000000" /> 
</shape> 

Si potrebbe anche fare questo completamente programatically creando una ColorDrawable:

getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0))); 

Altrimenti naturalmente è possibile nascondere completamente la barra delle azioni; in questo caso è possibile impostare un tema personalizzato sulla vostra attività in palese:

@android:style/Theme.NoTitleBar.Fullscreen 

oa livello di programmazione chiamando

getActionBar().hide(); 
+0

Grazie! Ho pensato che fosse qualcosa di semplice che mi mancava. – colabug

+0

Sai come regolare l'altezza della barra delle azioni? La mia dimensione non sembra avere un effetto! 'actionBar.setCustomView (customActionBarView, nuovo ActionBar.LayoutParams (ActionBar.LayoutParams.MATCH_PARENT, R.dimen.action_bar_height));' – colabug

+0

non sono sicuro che si possa effettivamente modificare l'altezza della barra di azione, direi di no, ma se possibile, vi consiglio di non farlo perché è un componente dell'interfaccia utente definitivo a nido d'ape. – MrJre

9

penso che si dovrebbe essere in grado di farlo utilizzando il flag finestra FEATURE_ACTION_BAR_OVERLAY.

Prima di chiamare setContentView() nella vostra attività,

chiamata:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

E sarà utilizzare un sovrapposto ActionBar invece di spingere verso il basso la vostra finestra.

4

Ecco come ho ottenuto questo al lavoro:

1) Richiesta di ActionBar sovrapposizione di programmazione chiamando

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

questo 'requestFeature()' deve essere richiesta dalla vostra attività ' metodo onCreate() prima di chiamare "setContentView (R.layout.my_layout)":

2) impostare il colore ActionBar chiamando setBackgroundDrawable() modo:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00212121"))); 

questo metodo richiede sia un riferimento a una drawable o si può anche utilizzare un parser colore per analizzare un valore di colore esadecimale (prime 2 cifre vengono utilizzati per il canale alfa partire da # Da 00 a #FF)

Nota che sto utilizzando actionBarSherlok getSupportActionBar() ma questo dovrebbe funzionare con qualsiasi barra delle azioni.

Se ancora non potete ottenere questo lavoro, prova ad aggiungere questo al vostro stile tema

<item name="windowActionBarOverlay">true</item> 
<item name="android:actionBarStyle">@style/ActionBar.Transparent.Example</item> 
<item name="android:windowActionBarOverlay">true</item> 
5

Il codice di cui sopra è assolutamente corretto per fare una barra delle operazioni.

Invece di

getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0))) 

uso

getActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

In questo modo, sarete in grado di vedere la barra delle azioni completamente trasparente.

12

Oltre alla risposta corretta, se si utilizza AppcomatActivity, chiamare supportRequestWindowFeature invece di

vecchia versione: getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Si desidera utilizzare:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 
    super.onCreate(savedInstanceState); 
} 
+0

Finalmente!Grazie amico :) – Analizer

+0

Grazie! Ha funzionato per me. –

Problemi correlati