que para lollipop descargar cualquier caracteristicas android android-ui android-5.0-lollipop

android - para - Lollipop: dibuja detrás de statusBar con su color configurado en transparente



descargar lollipop 5.1 para cualquier android (15)

He establecido mi color de barra de estado en transparente para Lollipop solo con la siguiente línea en mi tema:

<item name="android:statusBarColor">@android:color/transparent</item>

Ahora necesito dibujar detrás de él, pero no puedo ver ningún dibujo detrás. Sé cómo hacerlo con la propiedad windowTranslucentStatus , pero no quiero usar esta propiedad, ya que ignorará el color del statusBar establecido en transparente.


Aquí está el tema que uso para lograr esto:

<style name="AppTheme" parent="@android:style/Theme.NoTitleBar"> <!-- Default Background Screen --> <item name="android:background">@color/default_blue</item> <item name="android:windowTranslucentStatus">true</item> </style>


Con Android Studio 1.4, el proyecto de plantilla con código de placa de caldera establece el tema Overlay en su AppbarLayout y / o Toolbar. También están configurados para ser representados detrás de la barra de estado por fitSystemWindow attribute = true. Esto hará que solo la barra de herramientas se represente directamente debajo de la barra de estado y todo lo demás se mostrará debajo de la barra de herramientas. Por lo tanto, las soluciones proporcionadas anteriormente no funcionarán por sí solas. Deberá realizar los siguientes cambios.

  • Elimine el tema Superposición o cámbielo a un tema no superpuesto para la barra de herramientas.
  • Ponga el siguiente código en su archivo styles-21.xml .

    @android: color / transparente

  • Asigne este tema a la actividad que contiene el cajón de navegación en el archivo AndroidManifest.xml .

Esto hará que el cajón de navegación se muestre detrás de la barra de estado transparente.


En lugar de

<item name="android:statusBarColor">@android:color/transparent</item>

Use lo siguiente:

<item name="android:windowTranslucentStatus">true</item>

Y asegúrese de eliminar el relleno superior (que se agrega de forma predeterminada) en su diseño ''MainActivity''.

Tenga en cuenta que esto no hace que la barra de estado sea completamente transparente, y todavía habrá una superposición "negro desvaído" sobre su barra de estado.


Esto funcionó para mi caso

// Create/Set toolbar as actionbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // Check if the version of Android is Lollipop or higher if (Build.VERSION.SDK_INT >= 21) { // Set the status bar to dark-semi-transparentish getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // Set paddingTop of toolbar to height of status bar. // Fixes statusbar covers toolbar issue toolbar.setPadding(0, getStatusBarHeight(), 0, 0); }

// A method to find height of the status bar public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; }

Para obtener más información sobre cómo trabajar con statusBars: youtube.com/watch?v=_mGDMVRO3iE


Hay una buena biblioteca StatusBarUtil de @laobie que ayuda a dibujar fácilmente la imagen en StatusBar.

Simplemente agregue su build.gradle :

compile ''com.jaeger.statusbarutil:library:1.4.0''

Luego en el conjunto de actividades

StatusBarUtil.setTranslucentForImageView(Activity activity, int statusBarAlpha, View viewNeedOffset)

En el diseño

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical"> <ImageView android:layout_alignParentTop="true" android:layout_width="match_parent" android:adjustViewBounds="true" android:layout_height="wrap_content" android:src="@drawable/toolbar_bg"/> <android.support.design.widget.CoordinatorLayout android:id="@+id/view_need_offset" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@android:color/transparent" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> <!-- Your layout code --> </android.support.design.widget.CoordinatorLayout> </RelativeLayout>

Para obtener más información, descargue la demo o clone desde la StatusBarUtil y juegue con todas las funciones.

Nota: Soporte KitKat y superior.

¡Espero que ayude a alguien más!


La respuesta aceptada funcionó para mí usando un CollapsingToolbarLayout. Sin embargo, es importante tener en cuenta que setSytstemUiVisibility() anula cualquier llamada previa a esa función. Entonces, si está utilizando esa función en otro lugar para la misma vista, debe incluir las banderas View.SYSTEM_UI_FLAG_LAYOUT_STABLE y View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN , o se View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN con la nueva llamada.

Este fue mi caso, y una vez que agregué las dos banderas al otro lugar al que estaba llamando para setSystemUiVisibility() , la respuesta aceptada funcionó perfectamente.


La respuesta de @Cody Toombs condujo a un problema que trae el diseño detrás de la barra de navegación. Entonces, lo que encontré es usar this solución dada por @Kriti

Aquí está el fragmento de código de Kotlin para el mismo:

if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) { setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true) } if (Build.VERSION.SDK_INT >= 19) { window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN } if (Build.VERSION.SDK_INT >= 21) { setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false) getWindow().setStatusBarColor(Color.TRANSPARENT) } private fun setWindowFlag(activity: Activity, bits: Int, on: Boolean) { val win: Window = activity.getWindow() val winParams: WindowManager.LayoutParams = win.getAttributes() if (on) { winParams.flags = winParams.flags or bits } else { winParams.flags = winParams.flags and bits.inv() } win.setAttributes(winParams) }

También necesitas agregar

android:fitsSystemWindows="false"

Vista raíz de su diseño.


La solución correcta es cambiar una propiedad en XML debajo de su etiqueta de actividad al siguiente estilo. Solo funciona

android:theme="@style/Theme.AppCompat.Light.NoActionBar"


La solución de Cody Toombs casi me funcionó. No estoy seguro de si esto está relacionado con Xamarin o no, pero ahora tengo una solución aceptable:

Esta es mi configuración:

Tengo un proyecto de Android en el que hice referencia a los paquetes de Android. V4 y v7. Tengo dos estilos definidos:

valores / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> </style> </resources>

values-v21 / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:statusBarColor">@android:color/transparent</item> </style> </resources>

AndroidManifest se dirige a "MyStyle":

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.agn.test.test"> <uses-sdk android:minSdkVersion="10" /> <application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:theme="@style/MyStyle"> </application> </manifest>

Y finalmente el código en la Actividad principal:

[Activity (Label = "Test", MainLauncher = true, Icon = "@mipmap/icon")] public class MainActivity : Activity { protected override void OnCreate (Bundle savedInstanceState) { base.OnCreate (savedInstanceState); SetContentView (Resource.Layout.Main); //Resource.Layout.Main is just a regular layout, no additional flags. Make sure there is something in there like an imageView, so that you can see the overlay. var uiOptions = (int)Window.DecorView.SystemUiVisibility; uiOptions ^= (int)SystemUiFlags.LayoutStable; uiOptions ^= (int)SystemUiFlags.LayoutFullscreen; Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions; Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds); } }

Tenga en cuenta que configuro el indicador DrawsSystemBarBackgrounds, esto hace toda la diferencia

Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds);

Pasé mucho tiempo haciendo las cosas bien, de hecho demasiado tiempo. Esperemos que esta respuesta ayude a cualquiera que intente lograr lo mismo.


Prueba este tema

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="colorPrimaryDark">@android:color/transparent</item> <item name="colorPrimary">@color/md_blue_200</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:windowTranslucentStatus">true</item> </style>

Asegúrese de que su conjunto de diseño

android:fitsSystemWindows="false"



Similar a algunas de las soluciones publicadas, pero en mi caso hice la barra de estado transparente y fijé la posición de la barra de acción con un margen negativo

if (Build.VERSION.SDK_INT >= 21) { getWindow().setStatusBarColor(Color.TRANSPARENT); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) toolbar.getLayoutParams(); lp.setMargins(0, -getStatusBarHeight(), 0, 0); }

Y usé en la barra de herramientas y la vista raíz

android:fitsSystemWindows="true"


Todo lo que necesitas hacer es establecer estas propiedades en tu tema

<item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item>


Tuve el mismo problema, así que creo ImageView que se dibuja detrás de la barra de estado API 19+

Establecer imagen personalizada detrás de la barra de estado gist.github.com

public static void setTransparent(Activity activity, int imageRes) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { return; } // set flags if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); activity.getWindow().setStatusBarColor(Color.TRANSPARENT); } else { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } // get root content of system window //ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); // rootView.setFitsSystemWindows(true); // rootView.setClipToPadding(true); ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content); if (contentView.getChildCount() > 1) { contentView.removeViewAt(1); } // get status bar height int res = activity.getResources().getIdentifier("status_bar_height", "dimen", "android"); int height = 0; if (res != 0) height = activity.getResources().getDimensionPixelSize(res); // create new imageview and set resource id ImageView image = new ImageView(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height); image.setLayoutParams(params); image.setImageResource(imageRes); image.setScaleType(ScaleType.MATRIX); // add image view to content view contentView.addView(image); // rootView.setFitsSystemWindows(true); }


Método 1:

Para lograr una barra de estado completamente transparente, debe usar statusBarColor , que solo está disponible en API 21 y superior. windowTranslucentStatus está disponible en API 19 y superior, pero agrega un fondo teñido para la barra de estado. Sin embargo, establecer windowTranslucentStatus logra una cosa que al cambiar statusBarColor a transparente no lo hace: establece los SYSTEM_UI_FLAG_LAYOUT_STABLE y SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN . La forma más fácil de obtener el mismo efecto es configurar manualmente estos indicadores, lo que desactiva de manera efectiva las inserciones impuestas por el sistema de diseño de Android y te deja valerte por ti mismo.

Llama a esta línea en su método onCreate :

getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

Asegúrese de establecer también la transparencia en /res/values-v21/styles.xml:

<item name="android:statusBarColor">@android:color/transparent</item>

O establezca la transparencia mediante programación:

getWindow().setStatusBarColor(Color.TRANSPARENT);

El lado bueno de este enfoque es que los mismos diseños y diseños también se pueden usar en API 19 al cambiar la barra de estado transparente por la barra de estado translúcida teñida.

<item name="android:windowTranslucentStatus">true</item>

Método 2:

Si solo necesita pintar una imagen de fondo debajo de su barra de estado, en lugar de colocar una vista detrás de ella, esto puede hacerse simplemente configurando el fondo del tema de su actividad a la imagen deseada y configurando la transparencia de la barra de estado como se muestra en el método # 1) Este fue el método que usé para crear las capturas de pantalla para el artículo de Android Police de hace unos meses.

Método 3:

Si tiene que ignorar las inserciones del sistema estándar para algunos diseños mientras los mantiene trabajando en otros, la única forma viable de hacerlo es trabajar con la clase ScrimInsetsFrameLayout menudo vinculada. Por supuesto, algunas de las cosas que se hacen en esa clase no son necesarias para todos los escenarios. Por ejemplo, si no planea usar la superposición de la barra de estado sintética, simplemente comente todo en el método init() y no se moleste en agregar nada al archivo attrs.xml. He visto funcionar este enfoque, pero creo que descubrirá que trae algunas otras implicaciones que pueden ser mucho trabajo para sortear.

También vi que te opones a envolver múltiples diseños. En el caso de envolver un diseño dentro de otro, donde ambos tienen match_parent para altura y ancho, las implicaciones de rendimiento son demasiado triviales para preocuparse. De todos modos, puede evitar esa situación por completo cambiando la clase que se extiende de FrameLayout a cualquier otro tipo de clase de diseño que desee. Funcionará bien.