Custom Android translúcido ActionBar

He estado recorriendo los interwebs (por ejemplo, la documentación de Android, respuestas aquí, etc) para la respuesta a lo que pensé que sería una pregunta bastante trivial. ¿Cómo lograr una barra de acción translúcida como las de Google Music y YouTube (los enlaces son ejemplos de imágenes)?

Quiero que el contenido de vídeo sea de pantalla completa y no restringido / empujado hacia abajo por la barra de acción mientras sigue aprovechando los beneficios de un componente de interfaz de usuario incorporado. Obviamente puedo usar una vista completamente personalizada, pero preferiría aprovechar la ActionBar si es posible.

Manifiesto

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

Actividad

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

Menú

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

Vista personalizada de ActionBar

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

Si quieres que tu actividad sea de pantalla completa, pero sigue mostrando una barra de acción, pero con un alpha tienes que pedir un modo de superposición para la barra de onCreate() en onCreate() de tu actividad:

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

Luego, después de llamar a setContentView(..) (ya que setContentView(..) también inicializa la barra de acción junto a la configuración del contenido), puede establecer un fondo dibujable en su barra de acciones:

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

Que puede ser una forma que se puede dibujar con un alpha puesto en 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> 

También puede hacer esto completamente programático mediante la creación de un ColorDrawable :

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

De lo contrario, puede ocultar la barra de acciones por completo; En ese caso usted puede fijar un tema de encargo en su actividad en su manifiesto:

 @android:style/Theme.NoTitleBar.Fullscreen 

O programáticamente llamando

 getActionBar().hide(); 

Además de la respuesta correcta, si está utilizando AppcomatActivity, llame a supportRequestWindowFeature en lugar de

Versión antigua: getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Desea utilizar:

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

Creo que deberías poder hacer esto usando la bandera de la ventana FEATURE_ACTION_BAR_OVERLAY .

Antes de llamar a setContentView() en su actividad,

Llamada:

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

Y utilizará una ActionBar de ActionBar superpuesta en lugar de empujar hacia abajo la ventana.

El código anterior es absolutamente correcto para hacer una barra de acción.

En lugar de

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

utilizar

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

De esta manera, podrá ver la barra de acción totalmente transparente.

Aquí es cómo conseguí esto trabajar:

1) Solicitud de superposición de la barra de acciones mediante programación llamando al

  getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

Este 'requestFeature ()' debe ser solicitado de su actividad 'onCreate ()' antes de llamar a 'setContentView (R.layout.my_layout)':

2) establecer el color de la barra de setBackgroundDrawable() llamando setBackgroundDrawable() así:

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

Este método requiere una referencia a un dibujable o también puede utilizar un analizador de color para analizar un valor de color hexadecimal (los primeros 2 dígitos se utilizan para el canal alfa comenzando en # 00 a #FF)

Tenga en cuenta que estoy usando actionBarSherlok getSupportActionBar() pero esto debería funcionar con cualquier barra de acción.

Si todavía no puede conseguir que esto funcione, intente agregar esto a su estilo de tema

 <item name="windowActionBarOverlay">true</item> <item name="android:actionBarStyle">@style/ActionBar.Transparent.Example</item> <item name="android:windowActionBarOverlay">true</item> 
  • ¿Cómo agregar el indicador de "menú" junto al icono de la aplicación de Barra de Acción?
  • Android alinea los elementos del menú a la izquierda en la barra de acción
  • Android: ¿Cómo navegar de nuevo desde la sub-pantalla de preferencia a través de la barra de acción en xml?
  • Necesita una respuesta definitiva para diseñar las pestañas de Android ActionBar
  • ActionBarSherlock menú de texto del panel de menú duro
  • Vista personalizada de las pestañas de Android
  • Honeycomb Action Bar no se muestra (desconcertado)
  • AppCompat v7: 21 ¿La barra de acción dividida está rota?
  • ¿Puede Android Actionbar ser colocado verticalmente?
  • Vista personalizada para elemento de menú
  • ¿Cómo configurar el elemento activo en la barra desplegable Barra de acciones?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.