android沉浸式,android沉浸式状态栏和虚拟键

安卓5.1怎么实现沉浸式状态栏

studio,中引入沉浸式兼容库

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了芦淞免费建站欢迎大家使用!

compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’

eclipse,可以导入相应的那个类。

第一类,兼容actionbar

第一步:设置activity主题android:theme=”@style/ActionBarTheme”

style name="ActionBarTheme" parent="android:Theme.Holo.Light.DarkActionBar"

!-- API 14 theme customizations can go here. --

item name="android:actionBarStyle"@style/ActionBarStyle/item

/style

style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse"

item name="android:background"@color/actionbar_bg/item

/style

第二步:设置状态栏透明,然后设置状态栏沉浸的颜色

@TargetApi(19)

private void setTranslucentStatus(boolean on) {

Window win = getWindow();

WindowManager.LayoutParams winParams = win.getAttributes();

final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;

if (on) {

winParams.flags |= bits;

} else {

winParams.flags = ~bits;

}

win.setAttributes(winParams);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (Build.VERSION.SDK_INT = Build.VERSION_CODES.KITKAT) {

setTranslucentStatus(true);

}

SystemBarTintManager tintManager = new SystemBarTintManager(this);

tintManager.setStatusBarTintEnabled(true);

//设置沉浸的颜色 tintManager.setStatusBarTintResource(R.color.statusbar_bg);}

第三步:设置适应windows,在布局文件设置

android:fitsSystemWindows=”true”

如果不设置,应用的ui会顶上去,顶进system ui

ok

第二类 没有actionbar的activity

第一步,设置主题,android:theme=”@style/FullBleedTheme”

style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar"

!-- API 14 theme customizations can go here. --

/style

style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor"

!-- API 19 theme customizations can go here. --

/style

或者

用toolbar只能设置Theme.AppCompat.NoActionBar主题

style name="AppThemeToolbar" parent="Theme.AppCompat.NoActionBar"

item name="colorPrimary"#2196F3/item

item name="colorPrimaryDark"#2196F3/item

!--item name="colorPrimaryDark"#1565C0/item--

item name="colorAccent"#E91E63/item

/style

第二步:同上一个第二步。

设置状态栏透明+颜色

mTintManager = new SystemBarTintManager(this);

mTintManager.setStatusBarTintEnabled(true);

mTintManager.setNavigationBarTintEnabled(true); mTintManager.setStatusBarTintResource(R.color.statusbar_bg);

android沉浸式

1、如何修改状态栏颜色。

2、如何修改状态栏文字颜色。

3、如何不被虚拟键隐藏,或隐藏虚拟键。

4、如何消除沉浸式。

5、如何修改导航栏内部的fragment的状态栏颜色。

可参考:

在styles.xml中添加style

在manifest.xml文件中进行配置

添加依赖

可以参考:暂无

以下内容可以直接复制到工具类中,在activity初始化的时候调用即可。文字颜色分亮色暗色,分别是白色和黑色。

可以参考:

以下方法可以放置在工具类中方便调用。

1、不隐藏底部虚拟键,不隐藏状态栏,布局顶部延伸至状态栏顶部不被虚拟键遮挡,且状态栏透明。

2、隐藏底部的虚拟键和状态栏

fragment的状态栏颜色其实就是activity状态栏颜色,所以还是去改变activity的状态栏颜色这么一个思路。

使用第三方组件,所以添加依赖

给导航栏控件添加tab切换事件监听,然后动态改变状态栏颜色即可,同样使用barUtils工具类。

最后在推荐一个github上的关于沉浸式效果的组件:

如何实现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:windowDrawsSystemBarBackgrounds"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沉浸式,android沉浸式状态栏和虚拟键
分享地址:http://pwwzsj.com/article/dscoige.html