符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
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);
1、如何修改状态栏颜色。
2、如何修改状态栏文字颜色。
3、如何不被虚拟键隐藏,或隐藏虚拟键。
4、如何消除沉浸式。
5、如何修改导航栏内部的fragment的状态栏颜色。
可参考:
在styles.xml中添加style
在manifest.xml文件中进行配置
添加依赖
可以参考:暂无
以下内容可以直接复制到工具类中,在activity初始化的时候调用即可。文字颜色分亮色暗色,分别是白色和黑色。
可以参考:
以下方法可以放置在工具类中方便调用。
1、不隐藏底部虚拟键,不隐藏状态栏,布局顶部延伸至状态栏顶部不被虚拟键遮挡,且状态栏透明。
2、隐藏底部的虚拟键和状态栏
fragment的状态栏颜色其实就是activity状态栏颜色,所以还是去改变activity的状态栏颜色这么一个思路。
使用第三方组件,所以添加依赖
给导航栏控件添加tab切换事件监听,然后动态改变状态栏颜色即可,同样使用barUtils工具类。
最后在推荐一个github上的关于沉浸式效果的组件:
沉浸式通知栏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) ; } }}
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"