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.
- Barra de acciones hasta navegación con fragmentos
- Animación suave cuando los cambios de pestaña
- AppCompat 21: name = colorPrimary no funciona junto con name = actionBarStyle
- Spinner en la barra de acción con sólo el icono pero no la opción seleccionada
- Inhabilitar Menubutton en el emulador de Android
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>
- Contenido de la barra ActionBar que se superpone
- ¿ActionBarSherlock permite activar / desactivar un ActionBar.Tab?
- Android split ActionBar - Cambiar el diseño de los iconos
- OnActivityResult no se llama cuando se hace clic en el botón Atrás en ActionBar
- ActionBarSherlock (ABS): cómo personalizar el texto del modo de acción close item?
- android getSupportActionBar () devuelve null en el fragmento
- Cómo mostrar iconos en el menú Desbordamiento en ActionBar
- Implementación de pestañas de barras de acción con fragmentos
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 puedo obtener un SeekBar vertical de trabajo en Android?
- OnPageSelected no se activa cuando se llama a setCurrentItem (0)