Custom Translucent Android ActionBar

He estado rastreando los interwebs (por ejemplo, documentación de Android, respuestas aquí, etc.) para la respuesta a lo que pensé que sería una pregunta bastante trivial. ¿Cómo se logra 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 video sea de pantalla completa y no esté restringido / empujado hacia abajo por la barra de acciones mientras aún aprovecha los beneficios de un componente de UI integrado. Obviamente puedo usar una vista completamente personalizada, pero prefiero aprovechar la barra de acciones si es posible.

Manifiesto

 

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ú

     

Vista personalizada de ActionBar

           

Si quieres que tu actividad sea a pantalla completa pero aún muestres una barra de acciones, pero con un alfa tienes que solicitar overlaymode 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 acciones 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 dibujable con un alfa puesto en res / dibujable:

     

También puede hacer esto completamente programáticamente creando un ColorDrawable :

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

De lo contrario, por supuesto, puede ocultar la barra de acciones por completo; en ese caso, puede establecer un tema personalizado 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 usar:

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

Creo que deberías poder hacer esto usando el indicador de ventana FEATURE_ACTION_BAR_OVERLAY .

Antes de llamar a setContentView() en su actividad,

Llamada:

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

Y usará una ActionBar superpuesta en lugar de presionar hacia abajo su 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 forma, podrá ver la barra de acciones completamente transparente.

Así es como hice que esto funcione:

1) Solicitud de superposición de barra de acciones mediante progtwigción llamando

  getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

esta ‘requestFeature ()’ debe ser solicitada desde su actividad ‘onCreate ()’ antes de llamar a ‘setContentView (R.layout.my_layout)’:

2) configure el color de la barra de setBackgroundDrawable() llamando a setBackgroundDrawable() manera:

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

este método requiere una referencia a un dibujable o también puede usar un analizador de color para analizar un valor de color hexadecimal (los primeros 2 dígitos se usan para el canal alfa comenzando en el # 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 hacer que esto funcione, intente agregar esto al estilo de su tema

 true @style/ActionBar.Transparent.Example true 

Solo me gustaría compartir con ustedes los pasos que tomé para lograr esto:

1) En la OnCreate de tu actividad,

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

entonces

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 

Esto se hace antes de setContentView.

2) Después de setContentView, puede hacer lo siguiente

  getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(0, 100, 181, 246))); 

Donde el valor alfa de 0 significa que es completamente transparente.