当前位置:首页 » 安卓系统 » android沉浸模式

android沉浸模式

发布时间: 2022-09-20 23:52:40

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

这个特性是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上,这样,就会是下面的效果:

这就是我们想要的了。

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

Android在4.4的时候增加了透明状态栏与导航栏的功能,依托于这个新特性,我们可以开始跟随潮流,实现Android的沉浸式状态栏 其实上图展示的这个关于界面的代码非常简单/**
* 关于界面
*
* @author SuS
* @time 2015.07.29
*/
public class AboutActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_about);

setImmerseLayout(findViewById(R.id.common_back));

initBackButton();
setTitleBar(R.string.rian_about);
}

@Override
protected void onResume() {
super.onResume();
}

@Override
protected void onPause() {
super.onPause();
}

@Override
protected void onDestroy() {
super.onDestroy();
}

}
现在请注意setImmerseLayout()这个方法,这个方法是在BaseActivity中实现的public class BaseActivity extends FragmentActivity {
private static final String TAG = BaseActivity;

...............

public void initBackButton() {
ImageView backButton = (ImageView) this.findViewById(R.id.rian_back_image);
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finishActivity();
}
});
}

protected void setImmerseLayout(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
/*window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);*/
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

int statusBarHeight = ScreenUtil.getStatusBarHeight(this.getBaseContext());
view.setPadding(0, statusBarHeight, 0, 0);
}
}

public void finishActivity() {
finish();
overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
}

public void setTitleBar(int id) {
TextView tvName = (TextView) findViewById(R.id.rian_title_text);
tvName.setText(id);
}
}
使用 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 或者 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
都可以使状态栏透明,但是关键是下面这两行代码,如果没有这两行,会是这样
那么这两行神奇的代码的原理是什么? 我们先看一下ScreenUtil中的getStatusBarHeight方法 /**
* 用于获取状态栏的高度。 使用Resource对象获取(推荐这种方式)
*
* @return 返回状态栏高度的像素值。
*/
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier(status_bar_height, dimen,
android);
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}

这里是获得状态栏的高度,然后我们就可以通过设置common_back的padding属性 即:view.setPadding(0, statusBarHeight, 0, 0)来达到终极效果 但是这里还是需要注意细节的,首先大家应该理解padding的含义:内边距 那么再看一下common_back的布局文件 在activity_about.xml中我们是使用include引用的common_back

common_back的布局如下:
<framelayout android:background="@color/common_top_bg" android:id="@+id/rian_head_layout" android:layout_height="wrap_content" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

</framelayout>

这里我们使用了一层FrameLayout包裹住RelativeLayout,这里有什么玄机那,其实这里就是为了 方便上面那两行神奇的代码起作用,这样我们就能设置RelativeLayout相对于FrameLayout的内边距为状态栏的高度了 也就完美的达到了沉浸式状态栏的目的,而且保证导航栏的相对位置不变。
这里存在一个common_back作为一个基准来控制高度达到状态栏的高度,如果一个activity只有一个背景图片或者不以类似导航栏的空间作为基准的话,怎么实现沉浸式状态栏,例如达到这种状态 我们只需要在代码这样设置 protected void setImmerseLayout(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
/*window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);*/
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

/* int statusBarHeight = ScreenUtil.getStatusBarHeight(this.getBaseContext());
view.setPadding(0, statusBarHeight, 0, 0);*/
}
}

然后在当前activity的布局文件中加入这两句话 android:fitsSystemWindows=true android:clipToPadding=true
这时候状态栏的背景与Activity的整个大背景融合在一起了

总结:
基于以上的方法介绍,我们可以实现状态栏与导航栏以及状态栏与页面大背景的沉浸式体验。
其实上面也可以看出代码封装的一些技巧:如让我们所有的activity继承BaseActivity,这样像

setImmerseLayout(findViewById(R.id.common_back)); initBackButton(); setTitleBar(R.string.rian_about); 诸如此类的操作实现起来省时省力了!

❸ Android QQ沉浸式状态栏效果是怎么实现的

首先是两个开启沉浸模式和关闭沉浸模式的函数
?
@SuppressLint("NewApi")
public static void hideSystemUI(View view) {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
@SuppressLint("NewApi")
public static void showSystemUI(View view) {
view.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
这些代码可以在google的开发者文档中找到,可以看这里Using Immersive Full-Screen Mode,上面的代码是在Android 4.4中才会生效,对应的Android版本兼容的判断请自行处理。
此外还需要一个辅助函数,用于获得状态栏高度,使用反射获得。
?
/**
* 获状态栏高度
*
* @param context 上下文
* @return 通知栏高度
*/
public int getStatusBarHeight(Context context) {
int statusBarHeight = 0;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object obj = clazz.newInstance();
Field field = clazz.getField("status_bar_height");
int temp = Integer.parseInt(field.get(obj).toString());
statusBarHeight = context.getResources().getDimensionPixelSize(temp);
} catch (Exception e) {
e.printStackTrace();
}
return statusBarHeight;
}

点击hide按钮进入沉浸模式,也就是隐藏状态栏,隐藏状态栏的同时需要修改Toolbar的上内边距,否则会显得很难看,这里注册一个监听,当进入沉浸模式后咱们改变Toolbar的上内边距
?
hide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = getWindow().getDecorView();
hideSystemUI(view);
mToolbar.set(new View.() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
mToolbar.setPadding(mToolbar.getPaddingLeft(), 0,mToolbar.getPaddingRight(), mToolbar.getPaddingBottom());
}
});
}
});
进入沉浸模式后,手指从屏幕顶部向下划,状态栏就出现了,过2秒左右它又会自动消失。
点击show按钮退出沉浸模式,同时Toolbar的内边距也要增加到状态栏的高度。
?
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = getWindow().getDecorView();
showSystemUI(view);
mToolbar.set(new View.() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
mToolbar.setPadding(mToolbar.getPaddingLeft(), getStatusBarHeight(MainActivity.this),mToolbar.getPaddingRight(), mToolbar.getPaddingBottom());
}
});
}
});
如果使用的是SystemBarTintManager这个类进行的状态栏的着色,除上方的操作外,还要在对应的监听里增加状态栏着色的禁止和启动的功能。
进入沉浸模式,要禁用
?
tintManager.setStatusBarTintEnabled(false);

退出沉浸模式,要启动
?
tintManager.setStatusBarTintEnabled(true);

如果想更加平滑,则可以对padding的改成增加动画,具体动画效果自行添加。

❹ 为什么国内Android应用都不适配沉浸式状态栏

  • 简单介绍

    沉浸式是APP界面图片延伸到状态栏, 应用本身沉浸于状态栏。当启用该模式,应用程序的界面将占据整个屏幕,系统自动将隐藏系统的状态栏和导航栏,让应用程序内容可以在最大显示范围呈现。

  • 常见问题

  1. 4.4及其以上都是可以实现沉浸式状态栏效果的,5.0及其以上可以直接在主题中设置颜色,也可以调用Window类中的setStatusBarColor(int color)来实现,这两种方式在5.0上都比较简单。

  2. 图片背景的页面让状态栏透明及半透明。

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

    注意引入相关依赖:
    Java代码
    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/HTML代码
    <?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
    XML/HTML代码
    <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
    XML/HTML代码
    <resources>
    <style name="AppTheme" parent="@style/BaseAppTheme">
    <item name="android:windowTranslucentStatus">true</item>
    </style>
    </resources>
    ok,这个没撒说的。注意我们的主题是基于NoActionBar的,android:windowTranslucentStatus这个属性是v19开始引入的。
    (二)布局文件
    activity_main.xml
    XML/HTML代码
    <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/HTML代码
    <?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_content
    • ToolBar添加属性android:fitsSystemWindows="true"
    • header_just_username.xml的跟布局RelativeLayout,添加属性android:fitsSystemWindows="true"
    android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding去为我们的status_bar留下空间。
    根据上面的解释,如果你不写,那么状态栏和Toolbar就会有挤一块的感觉了,类似会这样。

    ❻ android中在多个Fragment中切换是否沉浸,界面布局不能铺满或者被拉伸

    天想试试沉浸栏的使用,但是按照网上相应的方法设置完成后,没有达到想要的结果。使用情况是activity配合groupradio实现fragment切换,每个fragment的状态栏需要显示不同的颜色。通过hide和show的方式控制显示当前fragment。在对应的xml中设置Android:fitsSystemWindows="true",以达到改变状态栏颜色的问题(具体如何配置请查阅其他文档)。

    但是这样做第一个fragment达到了想要的效果,其他三个状态栏的颜色正确,但是padding没有设置成功。标题栏占用状态栏的位置。

    解决方法:

    将xml中的android:fitsSystemWindows="true"去掉,通过代码的方式来控制。在默认第一个fragment的onCreateView中设置view.setFitsSystemWindows(true);该view为该fragment对应的view。在onHiddenChanged中,设置对应的状态。

    详细

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

    styles.xml设置如下:
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>

    <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:actionModeBackground">@drawable/context_menu</item>
    </style>

    <style name="TranslucentTheme" parent="AppTheme.NoActionBar">
    </style>

    V21的styles.xml设置如下:
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:">true</item>
    <item name="android:windowContentTransitions">true</item>
    <item name="android:statusBarColor">@color/colorPrimary</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:actionModeBackground">@drawable/context_menu</item>
    </style>

    <style name="TranslucentTheme" parent="AppTheme.NoActionBar">
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">false</item>
    </style>

    再在要显示的toolbar里加上属性:
    android:fitsSystemWindows="true"

    主题的属性设置为:

    <style name="TranslucentTheme" parent="AppTheme.NoActionBar">

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

    沉浸式通知栏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) ; } }}

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

    styles.xml设置如下: <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="windowActionModeOverlay">true</item> <item name="android:actionModeBackground">@drawable/context_menu</item> </style> <style name="TranslucentTheme" parent="AppTheme.NoActionBar"> </style> V21的styles.xml设置如下: <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:">true</item> <item name="android:windowContentTransitions">true</item> <item name="android:statusBarColor">@color/colorPrimary</item> <item name="windowActionModeOverlay">true</item> <item name="android:actionModeBackground">@drawable/context_menu</item> </style> <style name="TranslucentTheme" parent="AppTheme.NoActionBar"> <item name="android:windowTranslucentStatus">false</item> <item name="android:windowTranslucentNavigation">false</item> </style> 再在要显示的toolbar里加上属性: android:fitsSystemWindows="true" 主题的属性设置为: <style name="TranslucentTheme" parent="AppTheme.NoActionBar">

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

    通知栏(notification)背景颜色跟随app导航栏(top title)背景颜色变化而变化。
    这也叫沉浸式状态栏,这是Google在Android 4.4以上的系统提出的。
    在activity中加入:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
    然后在xml布局文件中加入:
    android:clipToPadding="false"
    android:fitsSystemWindows="true"
    有什么不会的再问我。

热点内容
取消微信设置密码在哪里设置 发布:2025-02-05 22:48:49 浏览:666
mysql内存存储 发布:2025-02-05 22:30:39 浏览:569
静态存储区堆栈 发布:2025-02-05 22:09:11 浏览:101
js加密算法 发布:2025-02-05 22:06:35 浏览:230
python3graphics 发布:2025-02-05 21:36:57 浏览:511
为什么英雄联盟一个服务器进不去 发布:2025-02-05 21:36:12 浏览:182
服务器搭建网站开发教材 发布:2025-02-05 21:31:57 浏览:567
pythonrose 发布:2025-02-05 21:31:46 浏览:923
php数组从小到大排序 发布:2025-02-05 21:26:01 浏览:325
单片机存储器扩展 发布:2025-02-05 21:17:35 浏览:966