软录 · 2022年12月25日

安卓42能用沉浸式状态栏|安卓开发中怎样设置沉浸式状态栏

Ⅰ 有没有啥办法让安卓4.3也能像MIUI6或者iOS7那样可以沉浸式通知栏

沉浸式通知栏Android4.4以上才支持的新特性。4.3不支持。具体实现方式如下:1.新建个公共style,设置android:fitsSystemWindows=true<!– 设置应用布局时是否考虑系统窗口布局;true –> <style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar"> <item name="android:fitsSystemWindows">true</item> </style>2. 修改AndroidManifest.xml,让所有的activity样式默认设置为AppBaseTheme(*不同项目要灵活处理,笔者项目的activity样式都是统一的所以这样设置没问题,但是实际情况下不同的activity可能调用的样式不一样,需要读者自行按自己的项目来设置)<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme" android:name="****">3.新增沉浸式通知栏实现类,实现原理很简单。 1)判断当前系统版本是不是4.4以上,判断代码如下: if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) 2)如果大于4.4则设置状态栏透明化,代码如下: window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 3)获取activity的根rootView(DecorView),然后创建一个新的view stateBarView并把它添加到rootView(这里手动给它设置个ID,下次进来时先判断rootView是否已创建stateBarView,如果已创建则直接获取该View这样可以防止重复创建,导致内存泄露)以下是具体代码实现:import android.annotation.SuppressLint;import android.app.Activity;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.os.Build;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.FrameLayout.LayoutParams;/** * 沉浸式通知栏公共类 * @author hurrican * */@SuppressLint({ "InlinedApi", "ResourceAsColor" })public class ImmersedNotificationBar {private Activity activity ;//设置沉浸式通知栏的ID(防止重复创建)private final static int IMMERSED_NOTIFICATION_BAR_ID = 12345678 ;private final static String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height" ;public ImmersedNotificationBar(Activity activity){this.activity = activity ;}//获取状态栏高度private int getStatusBarHeight(Resources res){ int statusBarHeight = 0; int resourceId = res.getIdentifier(STATUS_BAR_HEIGHT_RES_NAME, "dimen", "android"); if (resourceId > 0) { statusBarHeight = res.getDimensionPixelSize(resourceId); } return statusBarHeight ;}//添加顶部状态栏private View addStateBar(Activity activity,ViewGroup rootView,int statusBarHeight){ //创建新的View,并添加到rootView顶部) View statusBarView ; if(null!=rootView.findViewById(IMMERSED_NOTIFICATION_BAR_ID)){ statusBarView = rootView.findViewById(IMMERSED_NOTIFICATION_BAR_ID); }else{ statusBarView = new View(activity); rootView.addView(statusBarView); } statusBarView.setId(IMMERSED_NOTIFICATION_BAR_ID) ; LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,statusBarHeight); params.gravity = Gravity.TOP; statusBarView.setLayoutParams(params); statusBarView.setVisibility(View.VISIBLE); return statusBarView ;}/** * 设置状态栏颜色 * @param ColorId */public void setStateBarColor(int ColorId){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Window window = activity.getWindow();//activity的顶级布局ViewGroup rootView = (ViewGroup) window.getDecorView();//透明化状态栏 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); Resources res = activity.getResources(); //获取状态栏目的高度 int statusBarHeight = getStatusBarHeight(res); View stateBarView = addStateBar(activity,rootView,statusBarHeight) ; stateBarView.setBackgroundColor(ColorId) ;}}/** * 设置状态栏颜色 * @param ColorId */public void setStateBarDrawable(Drawable drawable){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Window window = activity.getWindow();//activity的顶级布局ViewGroup rootView = (ViewGroup) window.getDecorView();//透明化状态栏 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); Resources res = activity.getResources(); //获取状态栏目的高度 int statusBarHeight = getStatusBarHeight(res); View stateBarView = addStateBar(activity,rootView,statusBarHeight) ; stateBarView.setBackgroundDrawable(drawable) ;}}}

Ⅱ 安卓开发中怎样设置沉浸式状态栏

这个特性是andorid4.4支持的,最少要api19才可以使用。下面介绍一下使用的方法,非常得简单: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }} //透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);只要加入这两行代码,就可以实现沉浸式通知栏了。给大家看看这个界面的布局: <linearlayout android:background="#ffffff" android:cliptopadding="true" android:fitssystemwindows="true" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" tools:context=".MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"><textview android:background="#009959" android:layout_height="100dp" android:layout_width="match_parent"><button android:background="#ff669d/" android:layout_height="50dp" android:layout_width="100dp"></button></textview></linearlayout>大家看红色的那部分,加入那两行以后,界面仍然会是沉浸式的,但状态栏那部分,就不会再重叠了,像加了padding一样,如下图:大家看图,绿色的textView和红色的一个button都被下移了,状态栏是白色的,是背景linearLayout的颜色。很明显,这也不是我们想要的,我们希望状态栏和我们放在顶部的控件是同一个颜色,同时,控件内容也不和状态栏重复,其实,只要把那两行代码放到我们顶部的控件就可以了。代码如下:<linearlayout android:background="#ffffff" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" tools:context=".MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"><textview android:background="#009959" android:cliptopadding="true" android:fitssystemwindows="true" android:layout_height="100dp" android:layout_width="match_parent" android:text="你好,请问你有男朋友吗/"><button android:background="#ff669d/" android:layout_height="50dp" android:layout_width="100dp"></button></textview></linearlayout>就是那两行红色的代码,放在绿色的textView上,这样,就会是下面的效果: 这就是我们想要的了。

Ⅲ 4.2怎么搞沉浸式状态栏

准备工作:1.一部root之后的手机(安卓版本大于4.3)2.安装Xposed框架沉浸式状态栏安装方法:1.打开Xposed框架,点击下载,再点选搜索图标。2.搜索框中输入Flat Style colored Bars3.下载后并安装软件4.安装后,在Xposed的“模块”中勾选软件,并重启。重启后软件即生效,但是部分软件需要重新设置。用此软件进行透明状态栏,拾取颜色操作。5.状态栏设置中,我们可以忽略软件,也能选择图标的前景色和后景色。设置按钮打开后可以单独设置软件沉浸是状态栏,如果发现某款软件没有变色,就打开,设置完毕就关机,简单粗暴。6.演示状态栏透明教程<1>点击左上角白色设置按钮,点击背景色。<2>由于是透明,所有着色全部设置为0%,点击Apply。怎么样,效果出现了吧。7.演示颜色选择使用教程<1>打开QQ程序之后会发现状态栏是白色,没有跟程序中的“蓝色”相沉浸。这种不伦不类绝对不能忍啊。点击白色园钮开启设置,再点击背景色<2>点击"Take color from screen" 从屏幕中选择颜色,再点击你想要它变成的颜色位置。选择之后再点击右下角的"apply",设置完成。

Ⅳ 如何实现Android沉浸式状态栏

方法一:系统的方式沉浸式状态栏实现1、//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}2、布局加入: android:fitsSystemWindows="true" android:clipToPadding="true"方法二:实现思路,添加隐藏布局,然后我们动态的计算状态栏的高度,然后把这个高度设置成这个隐藏的布局的高度,便可以实现/** * 通过反射的方式获取状态栏高度 * * @return */ private int getStatusBarHeight() { try { Class<?> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } return 0; }方法三、用的github上的第三方库1.库地址:github.com/jgilfelt/SystemBarTint2.添加依赖库: compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’3、 android:fitsSystemWindows="true" android:clipToPadding="true4、 SystemBarTintManager tintManager = new SystemBarTintManager(this); // 激活状态栏 tintManager.setStatusBarTintEnabled(true); // enable navigation bar tint 激活导航栏 tintManager.setNavigationBarTintEnabled(true); //设置系统栏设置颜色 //tintManager.setTintColor(R.color.red); //给状态栏设置颜色 tintManager.setStatusBarTintResource(R.color.mask_tags_1); //Apply the specified drawable or color resource to the system navigation bar. //给导航栏设置资源 tintManager.setNavigationBarTintResource(R.color.mask_tags_1);

Ⅳ 如何实现android沉浸式状态栏

首先只有大于等于4.4版本支持这个半透明状态栏的效果,但是4.4和5.0的显示效果有一定的差异因为本例使用了NavigationView,所以布局代码稍多,当然如果你不需要,可以自己进行筛减。注意引入相关依赖:compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.android.support:support-v4:22.2.1' compile 'com.android.support:design:22.2.0'(一)colors.xml 和 styles.xml首先我们定义几个颜色:res/values/color.xml<?xml version="1.0" encoding="utf-8"?><resources> <color name="primary">#FF03A9F4</color> <color name="primary_dark">#FF0288D1</color> <color name="status_bar_color">@color/primary_dark</color></resources>下面定义几个styles.xml注意文件夹的路径:values/styles.xml<resources> <style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!– Customize your theme here. –> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">#FF4081</item> </style> <!– Base application theme. –> <style name="AppTheme" parent="@style/BaseAppTheme"> </style></resources>values-v19<resources> <style name="AppTheme" parent="@style/BaseAppTheme"> <item name="android:windowTranslucentStatus">true</item> </style></resources>1234567ok,这个没撒说的。注意我们的主题是基于NoActionBar的,android:windowTranslucentStatus这个属性是v19开始引入的。(二)布局文件activity_main.xml<android.support.v4.widget.DrawerLayout 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" ><LinearLayout android:id="@+id/id_main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/id_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:fitsSystemWindows="true" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/><TextView android:id="@+id/id_tv_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:text="HelloWorld" android:textSize="30sp"/> </LinearLayout><android.support.design.widget.NavigationView android:id="@+id/id_nv_menu" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/header_just_username" app:menu="@menu/menu_drawer" /></android.support.v4.widget.DrawerLayout>DrawerLayout内部一个LinearLayout作为内容区域,一个NavigationView作为菜单。 注意下Toolbar的高度设置为wrap_content。然后我们的NavigationView中又依赖一个布局文件和一个menu的文件。header_just_username.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="192dp" android:background="?attr/colorPrimaryDark" android:orientation="vertical" android:padding="16dp" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark"> <TextView android:id="@+id/id_link" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="16dp" android:text="http://blog.csdn.net/lmj623565791"/> <TextView android:id="@+id/id_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/id_link" android:text="Zhang Hongyang"/> <ImageView android:layout_width="72dp" android:layout_height="72dp" android:layout_above="@id/id_username" android:layout_marginBottom="16dp" android:src="@mipmap/ic_launcher"/></RelativeLayout>menu的文件就不贴了,更加详细的可以去参考Android 自己实现 NavigationView [Design Support Library(1)]。大体看完布局文件以后,有几个点要特别注意:ToolBar高度设置为wrap_contentToolBar添加属性android:fitsSystemWindows="true"header_just_username.xml的跟布局RelativeLayout,添加属性android:fitsSystemWindows="true"android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding去为我们的status_bar留下空间。(三)Activity的代码package com.zhy.colorfulstatusbar;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.id_toolbar); setSupportActionBar(toolbar); //StatusBarCompat.compat(this, getResources().getColor(R.color.status_bar_color)); //StatusBarCompat.compat(this); }}没撒说的,就是setSupportActionBar。

Ⅵ android 怎么做带标题栏的沉浸式状态栏

您可以尝试着将AppTheme设置成没有标题栏的样式,在res->values->styles中进行修改:,希望能帮到您,谢谢。

Ⅶ android 4.0怎么实现沉浸式状态栏

步奏一//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}1234567812345678步奏二布局加入:android:fitsSystemWindows="true"android:clipToPadding="true"

Ⅷ Android沉浸式状态栏 如何改变状态图标和文字的颜色

在Android4.4设备上支持沉浸式状态栏,只需要添加values-v19/styles.xml 下添加?12 <code class="language-xml hljs "><style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" type="text/css"><item name="android:windowTranslucentNavigation">false</item><item name="android:windowTranslucentStatus">true</item></style></code>然后在可以扩展的控件添加属性android:fitsSystemWindows="true"就阔以了。但在MIUI V6下如果扩展的颜色比较浅,会导致状态栏的文字无法看清。在其他ROM上会有渐变的灰色区域。MIUI提供了新的解决方案,在MIUI V6上状态栏支持灰黑色和白色两种字体颜色,开发者可以直接设置当前界面状态栏的文字颜色。具体代码:?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 <code class="language-java hljs ">/** * 只支持MIUI V6 * @param context * @param type 0–只需要状态栏透明 1-状态栏透明且黑色字体 2-清除黑色字体 */ public static void setStatusBarTextColor(Activity context,int type){ if (!isMiUIV6()){ DebugLog.d("isMiUIV6:"+false); return; } DebugLog.d("isMiUIV6:"+true); Window window = context.getWindow(); Class clazz = window.getClass(); try { int tranceFlag = 0; int darkModeFlag = 0; Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_TRANSPARENT"); tranceFlag = field.getInt(layoutParams); field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); if (type == 0){ extraFlagField.invoke(window, tranceFlag, tranceFlag);//只需要状态栏透明 }else if(type == 1){ extraFlagField.invoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag);//状态栏透明且黑色字体 }else { extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体 } }catch (Exception e){ } } private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"; private static boolean isMiUIV6() { try { final BuildProperties prop = BuildProperties.newInstance(); String name = prop.getProperty(KEY_MIUI_VERSION_NAME, ""); if ("V6".equals(name)){ return true; }else { return false; }// return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null// || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null// || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null; } catch (final IOException e) { return false; } }</code>

Ⅸ android开发android 4.4以下版本能不能实现沉浸式

android4.4以后便可以使用,网上有现成的类,复制出来后在调用的位置设置状态栏的颜色,与背景一样即可,然后再在布局文件里加两个配置属性(自行网络),可解决所有手机适配的BUG,否则小米手机会出问题

Ⅹ android 4.0怎么实现沉浸式状态栏

步奏一//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状版态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}1234567812345678步奏权二布局加入:android:fitsSystemWindows="true"android:clipToPadding="true"