Android Barra de estado completamente transparente?

He buscado la documentación pero solo encontré esto: Enlace . Que se usa para hacer la barra translúcida . Lo que trato de hacer es hacer que la barra de estado sea completamente transparente (como se muestra en la imagen a continuación) y que sea compatible con versiones anteriores para APK <19: enter image description here

Mi styles.xml:

  @style/ThemeActionBar true  @style/ThemeActionBar true    @null   @null  showHome | useLogo showHome|useLogo   

Lo que pude hacer:

enter image description here

Todo lo que necesita hacer es establecer estas propiedades en su tema:

 true true 

Su diseño de actividad / contenedor en el que desea tener una barra de estado transparente necesita este conjunto de propiedades:

 android:fitsSystemWindows="true" 

Por lo general, no es posible realizar esto con seguridad en prekitkat, parece que puedes hacerlo, pero algún código extraño lo hace .

EDITAR: Recomendaría esta lib: https://github.com/jgilfelt/SystemBarTint para un montón de control de color de barra de estado previo a la piruleta.

Después de mucha deliberación, aprendí que la respuesta para deshabilitar por completo la translucidez o cualquier color colocado en la barra de estado y la barra de navegación para lollipop es establecer este indicador en la ventana:

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

No es necesario ningún otro tema, produce algo como esto:

enter image description here

Simplemente agregue esta línea de código a su archivo java principal:

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

use android: fitsSystemWindows = “false” en su diseño superior

Puede usar la biblioteca externa StatusBarUtil :

Agregue a su nivel de módulo build.gradle :

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

Luego puede usar la siguiente utilidad para una actividad para hacer que la barra de estado sea transparente:

 StatusBarUtil.setTransparent(Activity activity) 

Ejemplo:

barra de estado transparente en Lollipop y KitKat

No importa, encontré una respuesta aquí: barra de estado completamente transparente y barra de navegación en lollipop

Espero que ayude a alguien :).

Ahora solo necesito volver atrás comparativamente.

usando este código en tu xml, podrás ver la barra de tiempo en tu actividad ur:

  

Para dibujar su diseño en la barra de estado:

valores / styles.xml

 true 

values-v21 / styles.xml

 true @color/colorPrimaryDark 

Utilice CoordinatorLayout / DrawerLayout que ya se ocupa del parámetro fitsSystemWindows o cree su propio diseño para que le guste esto:

 public class FitsSystemWindowConstraintLayout extends ConstraintLayout { private Drawable mStatusBarBackground; private boolean mDrawStatusBarBackground; private WindowInsetsCompat mLastInsets; private Map childsMargins = new HashMap<>(); public FitsSystemWindowConstraintLayout(Context context) { this(context, null); } public FitsSystemWindowConstraintLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FitsSystemWindowConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); if (ViewCompat.getFitsSystemWindows(this)) { ViewCompat.setOnApplyWindowInsetsListener(this, new android.support.v4.view.OnApplyWindowInsetsListener() { @Override public WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) { FitsSystemWindowConstraintLayout layout = (FitsSystemWindowConstraintLayout) view; layout.setChildInsets(insets, insets.getSystemWindowInsetTop() > 0); return insets.consumeSystemWindowInsets(); } }); setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); TypedArray typedArray = context.obtainStyledAttributes(new int[]{android.R.attr.colorPrimaryDark}); try { mStatusBarBackground = typedArray.getDrawable(0); } finally { typedArray.recycle(); } } else { mStatusBarBackground = null; } } public void setChildInsets(WindowInsetsCompat insets, boolean draw) { mLastInsets = insets; mDrawStatusBarBackground = draw; setWillNotDraw(!draw && getBackground() == null); for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); if (child.getVisibility() != GONE) { if (ViewCompat.getFitsSystemWindows(this)) { ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) child.getLayoutParams(); if (ViewCompat.getFitsSystemWindows(child)) { ViewCompat.dispatchApplyWindowInsets(child, insets); } else { int[] childMargins = childsMargins.get(child); if (childMargins == null) { childMargins = new int[]{layoutParams.leftMargin, layoutParams.topMargin, layoutParams.rightMargin, layoutParams.bottomMargin}; childsMargins.put(child, childMargins); } if (layoutParams.leftToLeft == LayoutParams.PARENT_ID) { layoutParams.leftMargin = childMargins[0] + insets.getSystemWindowInsetLeft(); } if (layoutParams.topToTop == LayoutParams.PARENT_ID) { layoutParams.topMargin = childMargins[1] + insets.getSystemWindowInsetTop(); } if (layoutParams.rightToRight == LayoutParams.PARENT_ID) { layoutParams.rightMargin = childMargins[2] + insets.getSystemWindowInsetRight(); } if (layoutParams.bottomToBottom == LayoutParams.PARENT_ID) { layoutParams.bottomMargin = childMargins[3] + insets.getSystemWindowInsetBottom(); } } } } } requestLayout(); } public void setStatusBarBackground(Drawable bg) { mStatusBarBackground = bg; invalidate(); } public Drawable getStatusBarBackgroundDrawable() { return mStatusBarBackground; } public void setStatusBarBackground(int resId) { mStatusBarBackground = resId != 0 ? ContextCompat.getDrawable(getContext(), resId) : null; invalidate(); } public void setStatusBarBackgroundColor(@ColorInt int color) { mStatusBarBackground = new ColorDrawable(color); invalidate(); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); if (mDrawStatusBarBackground && mStatusBarBackground != null) { int inset = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; if (inset > 0) { mStatusBarBackground.setBounds(0, 0, getWidth(), inset); mStatusBarBackground.draw(canvas); } } } } 

main_activity.xml

        

Resultado:

Captura de pantalla

android:fitsSystemWindows="true" solo funciona en v21. Podemos configurarlo en el tema xml o en el diseño principal como LinearLayout o en CoordinateLayout . Por debajo de v21, no pudimos agregar esta bandera. Cree una carpeta de valores diferentes con style.xml archivo style.xml diferente según su necesidad.

  @android:color/transparent  

No use windowLightStatusBar use en su lugar statusBarColor = @android:color/transparent

Esto es solo para API Level> = 21. Funciona para mí. Aquí está mi código (Kotlin)

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) findViewById(android.R.id.content).systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE }