transparente studio programacion personalizar notificaciones navegacion móviles hacer estado desarrollo curso como cambiar barra aplicaciones android android-actionbar android-toolbar appcompat-v7-r21 android-appcompat android-statusbar

studio - Barra de estado transparente de Android y barra de acción



manual de programacion android pdf (2)

Es compatible después de KITKAT. Simplemente agregue el siguiente código dentro del método onCreate de su Actividad. No necesita modificaciones en el archivo de manifiesto.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getWindow(); // in Activity''s onCreate() for instance w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); }

Hice algunas investigaciones sobre este tema y no pude encontrar una solución completa, así que, paso a paso y con un poco de prueba y error, finalmente descubrí cómo podemos lograr estos resultados: tener una Actionbar y una Actionbar transparentes o coloreadas . Mira mi respuesta a continuación.


Estoy desarrollando una aplicación que debe ser similar en todos los dispositivos con> = API14 cuando se trata de la barra de acción y la personalización de la barra de estado. Finalmente encontré una solución y, como me tomó un poco de tiempo, la compartiré para salvar algunas de las suyas. Comenzamos usando una dependencia appcompat-21.

Barra de acción transparente :

valores / styles.xml :

<style name="AppTheme" parent="Theme.AppCompat.Light"> ... </style> <style name="AppTheme.ActionBar.Transparent" parent="AppTheme"> <item name="android:windowContentOverlay">@null</item> <item name="windowActionBarOverlay">true</item> <item name="colorPrimary">@android:color/transparent</item> </style> <style name="AppTheme.ActionBar" parent="AppTheme"> <item name="windowActionBarOverlay">false</item> <item name="colorPrimary">@color/default_yellow</item> </style>


values-v21 / styles.xml :

<style name="AppTheme" parent="Theme.AppCompat.Light"> ... </style> <style name="AppTheme.ActionBar.Transparent" parent="AppTheme"> <item name="colorPrimary">@android:color/transparent</item> </style> <style name="AppTheme.ActionBar" parent="AppTheme"> <item name="colorPrimaryDark">@color/bg_colorPrimaryDark</item> <item name="colorPrimary">@color/default_yellow</item> </style>

Ahora puede usar estos temas en su AndroidManifest.xml para especificar qué actividades tendrán una ActionBar transparente o de color:

<activity android:name=".MyTransparentActionbarActivity" android:theme="@style/AppTheme.ActionBar.Transparent"/> <activity android:name=".MyColoredActionbarActivity" android:theme="@style/AppTheme.ActionBar"/>

Nota: en API> = 21 para obtener la Actionbar transparente, también debe tener la Statusbar transparente, de lo contrario no respetará sus estilos de color y permanecerá gris claro.



Barra de estado transparente (solo funciona con API> = 19) :
Este es bastante simple, solo use el siguiente código:

protected void setStatusBarTranslucent(boolean makeTranslucent) { if (makeTranslucent) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } else { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }

Pero notarás un resultado funky:

Esto sucede porque cuando la Statusbar es transparente, el diseño utilizará su altura. Para evitar esto solo necesitamos:

SOLUCIÓN UNO:
Agregue esta línea android:fitsSystemWindows="true" en su contenedor de vista de diseño de lo que quiera que se coloque debajo de la Barra de acciones:

... <LinearLayout android:fitsSystemWindows="true" android:layout_width="match_parent" android:layout_height="match_parent"> ... </LinearLayout> ...

SOLUCIÓN DOS:
Agregue algunas líneas a nuestro método anterior:

protected void setStatusBarTranslucent(boolean makeTranslucent) { View v = findViewById(R.id.bellow_actionbar); if (v != null) { int paddingTop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? MyScreenUtils.getStatusBarHeight(this) : 0; TypedValue tv = new TypedValue(); getTheme().resolveAttribute(android.support.v7.appcompat.R.attr.actionBarSize, tv, true); paddingTop += TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); v.setPadding(0, makeTranslucent ? paddingTop : 0, 0, 0); } if (makeTranslucent) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } else { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }

Donde R.id.bellow_actionbar será el id de la vista del contenedor de diseño de lo que queramos que se coloque debajo de la Actionbar :

... <LinearLayout android:id="@+id/bellow_actionbar" android:layout_width="match_parent" android:layout_height="match_parent"> ... </LinearLayout> ...

Así que esto es todo, creo que no estoy olvidando algo. En este ejemplo, no utilicé una Toolbar pero creo que tendrá el mismo resultado. Así es como personalizo mi Actionbar :

@Override protected void onCreate(Bundle savedInstanceState) { View vg = getActionBarView(); getWindow().requestFeature(vg != null ? Window.FEATURE_ACTION_BAR : Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(getContentView()); if (vg != null) { getSupportActionBar().setCustomView(vg, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(false); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayUseLogoEnabled(false); } setStatusBarTranslucent(true); }

Nota: esta es una abstract class que extiende ActionBarActivity
¡Espero eso ayude!