transparente studio sea que personalizar ocultar notificaciones navegacion iconos hacer estado como color cambiar barra android android-5.0-lollipop

studio - ocultar iconos de la barra de estado android



barra de estado completamente transparente y barra de navegaciĆ³n en lollipop (7)

Actualizar

Puede lograr el mismo efecto mediante programación en KitKat y posteriormente configurando el indicador FLAG_LAYOUT_NO_LIMITS dentro de la Window .

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

Si configura un recurso de fondo ( como un color o una imagen ) en su diseño, verá el color o la imagen "debajo" de la barra de estado.

<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@color/primary_dark</item>

Respuesta original

Parece android:windowTranslucentStatus y android:windowTranslucentNavigation debería ser true lugar de false

<resources> <style name="Theme" parent="android:Theme.Material.Wallpaper.NoTitleBar"> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:navigationBarColor">@android:color/transparent</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> </style> </resources>

Además, su diseño transparente de actividad / contenedor necesita este conjunto de propiedades:

android:fitsSystemWindows="true"

Source

Estoy tratando de hacer un lanzador de Android. Quiero lograr una barra de estado y una barra de navegación completamente transparentes, aquí está mi archivo xml de tema.

<resources> <style name="Theme" parent="android:Theme.Material.Wallpaper.NoTitleBar"> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:navigationBarColor">@android:color/transparent</item> <item name="android:windowTranslucentStatus">false</item> <item name="android:windowTranslucentNavigation">false</item> </style> </resources>

los dos últimos elementos no funcionan, todavía hay una sombra en la piruleta.

Esto es lo que parece (tenga en cuenta que en realidad hay una sombra en la barra de estado y la barra de navegación):

lo que quiero lograr (nova launcher):

¿Cómo hacer que la barra de estado y la barra de navegación sean "transparentes" en lugar de "translúcidas"?


Código 100% de trabajo

Barra de estado y barra de navegación completamente transparentes

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


El siguiente código es un ejemplo de lo que uso en mi proyecto:

styles.xml

<style name="FadingActionBarTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/FadingActionBarWidget</item> </style> <style name="FadingActionBarWidget.Transparent"> <item name="android:background">@android:color/transparent</item> </style> <style name="FadingActionBarTheme.TranslucentActionBar"> <item name="android:icon">@drawable/ic_ab_icon</item> <item name="android:actionBarStyle">@style/FadingActionBarWidget.Transparent</item> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowContentOverlay">@null</item> </style>

AndroidManifest.xml

<activity android:name=".MyActivity" android:label="@string/app_name" android:theme="@style/FadingActionBarTheme.TranslucentActionBar"> </activity>


Lo uso ya que mantiene la altura de la barra de estado y la barra de navegación

<!-- Base application theme. --> <style name="theme" parent="android:Theme.Material.Wallpaper.NoTitleBar"> <item name="android:navigationBarColor">#00000000</item> <item name="android:statusBarColor">#00000000</item> </style>

Sin embargo, esto requiere API 21+


Para aquellos que desean una barra de estado y una barra de navegación completamente transparentes en KitKat y más arriba, existe un pequeño conflicto con el uso de windowTranslucentNavigation con @Machado respuestas para Lollipop y para evitar ese conflicto, separe los estilos

styles.xml

<style name="LockScreenStyle" parent="@android:style/Theme.Wallpaper.NoTitleBar"> <item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item> <item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item> </style>

styles.xml (v21)

<style name="LockScreenStyle" parent="@android:style/Theme.Wallpaper.NoTitleBar"> <item name="android:windowDrawsSystemBarBackgrounds">true</item> </style>

MyClass.java

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); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { w.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); } }


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

valores / styles.xml

<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@color/colorPrimaryDark</item>

values-v21 / styles.xml

public class FitsSystemWindowConstraintLayout extends ConstraintLayout { private Drawable mStatusBarBackground; private boolean mDrawStatusBarBackground; private WindowInsetsCompat mLastInsets; private Map<View, int[]> 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); } } } }

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

<FitsSystemWindowConstraintLayout 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:fitsSystemWindows="true"> <ImageView android:layout_width="0dp" android:layout_height="0dp" android:fitsSystemWindows="true" android:scaleType="centerCrop" android:src="@drawable/toolbar_background" app:layout_constraintBottom_toBottomOf="@id/toolbar" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="0dp" android:layout_height="?attr/actionBarSize" android:background="@android:color/transparent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Content" android:textSize="48sp" /> </LinearLayout> </FitsSystemWindowConstraintLayout>

main_activity.xml

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); transparentStatusAndNavigation(); } private void transparentStatusAndNavigation() { //make full transparent statusBar if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) { setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, true); } if (Build.VERSION.SDK_INT >= 19) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION ); } if (Build.VERSION.SDK_INT >= 21) { setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, false); getWindow().setStatusBarColor(Color.TRANSPARENT); getWindow().setNavigationBarColor(Color.TRANSPARENT); } } private void setWindowFlag(final int bits, boolean on) { Window win = getWindow(); WindowManager.LayoutParams winParams = win.getAttributes(); if (on) { winParams.flags |= bits; } else { winParams.flags &= ~bits; } win.setAttributes(winParams); }

Resultado:


android:windowDrawsSystemBarBackgrounds agregar el indicador android:windowDrawsSystemBarBackgrounds a su tema

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

O llame a esto en onCreate ()

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);