安卓手机状态栏透明怎么弄

安卓手机状态栏透明怎么弄,第1张

有三种方法,分别为:

一、修改系统FrameWork。这种方法需要用户有相关的专业知识,动手能力强,而且每个手机修改方式不一样,可以在相关论坛进行学习。

二、刷机。这是最容易的方式,在网上找到ROM开发者制作的第三方,状态栏透明的ROM包,按下放出的教程进行刷机即可。

三、主题适配。这种方法需要自己的手机系统支持,比如小米就可以通过主题包更改状态栏的颜色

在Android44设备上支持沉浸式状态栏,只需要添加values-v19/stylesxml 下添加

1
2

<code class="language-xml hljs "><style name="AppBaseTheme" parent="@style/ThemeAppCompatLightNoActionBar" 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上状态栏支持灰黑色和白色两种字体颜色,开发者可以直接设置当前界面状态栏的文字颜色。
具体代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
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()){
DebugLogd("isMiUIV6:"+false);
return;
}
DebugLogd("isMiUIV6:"+true);
Window window = contextgetWindow();
Class clazz = windowgetClass();
try {
int tranceFlag = 0;
int darkModeFlag = 0;
Class layoutParams = ClassforName("androidviewMiuiWindowManager$LayoutParams");
Field field = layoutParamsgetField("EXTRA_FLAG_STATUS_BAR_TRANSPARENT");
tranceFlag = fieldgetInt(layoutParams);
field = layoutParamsgetField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag = fieldgetInt(layoutParams);
Method extraFlagField = clazzgetMethod("setExtraFlags", intclass, intclass);
if (type == 0){
extraFlagFieldinvoke(window, tranceFlag, tranceFlag);//只需要状态栏透明
}else if(type == 1){
extraFlagFieldinvoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag);//状态栏透明且黑色字体
}else {
extraFlagFieldinvoke(window, 0, darkModeFlag);//清除黑色字体
}
}catch (Exception e){

}
}

private static final String KEY_MIUI_VERSION_NAME = "romiuiuiversionname";
private static boolean isMiUIV6() {
try {
final BuildProperties prop = BuildPropertiesnewInstance();
String name = propgetProperty(KEY_MIUI_VERSION_NAME, "");
if ("V6"equals(name)){
return true;
}else {
return false;
}
// return propgetProperty(KEY_MIUI_VERSION_CODE, null) != null
// || propgetProperty(KEY_MIUI_VERSION_NAME, null) != null
// || propgetProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
} catch (final IOException e) {
return false;
}
}</code>

1最近项目遇到了webView中使用输入框,但是输入框被遮挡的问题,于是上网百度了一下,大佬已经给出了解决办法。我只是在基础上做些适配调整,仅供记录!!!!!!!!!!!

2解决问题,处理手机导航栏被遮挡

沉浸式状态栏Flat Style Colored Bars是一款基于xposed的通知栏美化工具,可以实现根据app颜色实现自适应沉浸式通知栏。沉浸模式是指手机系统的状态栏和软件内容颜色一致,使浏览页面信息更加舒适,视觉上更好看。

在悬浮的颜色设置按钮中,S 代表顶部状态栏,N 代表底部按键栏,R 代表重置。点击 S 可以设置在某个应用中显示的状态栏颜色,每次进入时就会显示该颜色。

这个属性的作用是让view可以根据系统窗口(如status bar)来调整自己的布局,如果值为true,就会调整view的paingding属性来给system windows留出空间(即给view添加一个值为状态栏高度的top padding)。

扩展资料

Android 60以上设置状态栏字体颜色默认状态栏字体颜色是白色的,如果ToolBar的颜色较浅,那么状态栏上白色的字看不怎么清楚。

如果在界面中有EditText的话,会发现当软件盘d出的时候(Activity已经设置了adjustResize),ToolBar的内容都被顶上去了,但是EditText输入框却被有顶上来(正常情况应该是ToolBar没事,输入框被软键盘顶上去)。

参考资料来源:百度百科—自动沉浸式状态栏

由于各系统版本的限制,沉浸式状态栏对系统有要求(Android44及以上、iOS70及以上),如果要兼容各系统版本,需要动态判断当前环境是否支持沉浸式状态栏以及系统状态栏的高度:
使用5+API
- 判断当前环境是否支持沉浸式状态栏
plusnavigatorisImmersedStatusbar()
如果当前支持沉浸式状态栏则返回true,否则返回false。
- 获取当前系统状态栏高度
plusnavigatorgetStatusbarHeight()
获取系统状态栏高度,Number类型。
其单位是逻辑像素值,即css中可直接使用的像素值,可能存在小数点。
实际用法参考HelloH5应用的“plus/dochtml”:
// 创建加载内容窗口
var topoffset='45px';
if(plusnavigatorisImmersedStatusbar()){// 兼容immersed状态栏模式
// 获取状态栏高度并根据业务需求处理,这里重新计算了子窗口的偏移位置
topoffset=(Mathround(plusnavigatorgetStatusbarHeight())+45)+'px';
}
// 使用偏移位置创建子窗口
wc=pluswebviewcreate(null,'doccontent',{top:topoffset,bottom:'0px',bounce:'vertical',bounceBackground:'#FFFFFF'});
通过userAgent判断
5+API需要在plusready事件后才能调用,通常此事件在DOM加载渲染后才会触发,无法再渲染前根据不同的状态来设置css。
为了解决此问题,在支持5+API运行环境的userAgent中特定字段Html5Plus/10后添加Immersed标识,如下:
"Html5Plus/10 (Immersed/30)"
其中Immersed/后的30表示状态栏的高度,单位为逻辑像素值。
可以使用正则表达式进行获取:
var immersed = 0;
var ms=(/Html5Plus\/+\s\((Immersed\/(\d+\\d))\)/gi)exec(navigatoruserAgent);
if(ms&&mslength>=3){ // 当前环境为沉浸式状态栏模式
immersed=parseFloat(ms[2]);// 获取状态栏的高度
}
immersed值如果大于0则表示当前环境支持沉浸式状态栏。
获取状态栏高度后,可以使用js动态修改DOM元素的css属性来设置样式,如设置界面头区域的顶部内边距为状态栏的高度(避免系统状态栏与界面头重叠),示例如下:
var t=documentgetElementById('header');
t&&tstylepaddingTop=immersed+'px';
具体项目中可根据界面设计,灵活使用immersed值来动态适配各种效果。
完整用法可参考HelloH5应用中的“js/immersedjs”


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13276653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-06
下一篇 2023-07-06

发表评论

登录后才能评论

评论列表(0条)

保存