沉浸状态栏java代码 沉浸式状态栏什么意思?

java状态栏怎么制作?用Swing
做界面的话 , 状态栏其实就是JToolBar
别看它叫状态栏,实际就是在工具栏上加一个标签
标签上显示信息,标签是不能改的
JFrame的布局默认是边框布局,分上北,下南,左西,右东,中间
就把JToolBar加在南边,也就是下边
下边把重要的代码写出来
JLabel
label=new
JLabel("这里是状态栏");
toolBar.add(label);//把标签加到工具栏上
contentPane.add(toolBar,BorderLayout.SOUTH);
//把工具栏加到框架的南边
工具栏,你还可以加很多东西,加的多了,就是你常看到
软件的那个样子了
如何实现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可能调用的样式不一样,需要读者自行按自己的项目来设置)
applicationandroid: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) , 然后创建一个新的viewstateBarView并把它添加到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 (resourceId0) {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) ; } }}
安卓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沉浸式状态栏 如何改变状态图标和文字的颜色在Android4.4设备上支持沉浸式状态栏沉浸状态栏java代码,只需要添加values-v19/styles.xml 下添加
?
1
2
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
然后在可以扩展沉浸状态栏java代码的控件添加属性android:fitsSystemWindows="true"
就阔以了 。
但在MIUI V6下如果扩展的颜色比较浅 , 会导致状态栏的文字无法看清 。在其他ROM上会有渐变的灰色区域 。
MIUI提供了新的解决方案,在MIUI V6上状态栏支持灰黑色和白色两种字体颜色,开发者可以直接设置当前界面状态栏的文字颜色 。
具体代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
【沉浸状态栏java代码 沉浸式状态栏什么意思?】14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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)){
returntrue;
}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 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的上内边距,否则会显得很难看,这里注册一个监听OnSystemUiVisibilityChangeListener,当进入沉浸模式后我们改变Toolbar的上内边距
?
hide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = getWindow().getDecorView();
hideSystemUI(view);
mToolbar.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@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.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@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的改成增加动画 , 具体动画效果自行添加 。
关于沉浸状态栏java代码和沉浸式状态栏什么意思?的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读