盒子
盒子
文章目录
  1. 沉浸式状态栏
    1. 代码方式
    2. xml配置方式
  2. 手机属性

UI优化

沉浸式状态栏

StatusBarUtil

代码方式

  • getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    • 隐藏状态栏 + 全屏
    • 等价于SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    • 也可以在theme中设置属性windowTranslucentStatus
    • 自己绘制状态栏即可
// 清除全屏,指定状态栏颜色
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//注意要清除 FLAG_TRANSLUCENT_STATUS flag
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setStatusBarColor(getResources().getColor(android.R.color.holo_red_light));

xml配置方式

<!-- res/values/styles.xml -->
<resources>
<style name="Theme.AppCompat.NoActionBar">
<!-- 隐藏系统标题栏 -->
<item name="windowActionBar">false</item>
<!-- 隐藏项目标题栏 -->
<item name="windowNoTitle">true</item>
<!-- 隐藏状态栏 -->
<!-- item name="android:windowFullscreen">true</item -->
<!-- 透明状态栏 -->
<item name="android:windowTranslucentStatus">true</item>
</style>

<!--隐藏标题栏-->
<style name="Theme_NoTitle" parent="android:style/Theme.NoTitleBar.Fullscreen">
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
</style>
<!--透明元素-->
<style name="Theme_Translucent" parent="android:style/Theme.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowFullscreen">false</item>
</style>
<!--全屏-->
<style name="Theme_Fullscreen" parent="android:style/Theme.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
<!--
AndroidManifest.xml
挂在 application 下是全局有效
也可挂在 activity 上,指定页面有效
-->
<application
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.NoActionBar"
</activity>
</application>

手机属性

// 顶部状态栏高度
public int getStatusBarHeight() {
Resources resources = app.getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
return resources.getDimensionPixelSize(resourceId);
}
// 底部功能按钮栏
public int getNavigationBarHeight() {
Resources resources = app.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
return resources.getDimensionPixelSize(resourceId);
}
// 屏幕高度
public static int getScreenHeight(Context context) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm.heightPixels;
}
// 屏幕宽度
public static int getScreenWidth(Context context) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm.widthPixels;
}
支持一下
扫一扫,支持一下
  • 微信扫一扫
  • 支付宝扫一扫