Android 在低版本4.4以上 动态设置状态栏和底部导航栏的背景色
来源:互联网 发布:网络割接原则 编辑:程序博客网 时间:2024/05/17 09:05
一,xml 布局
二,MainActivity 方法
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //判断版本,如果[4.4,5.0)就设置状态栏和导航栏为透明 if (isFitVerson()) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //设置虚拟导航栏为透明 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } setContentView(R.layout.activity_main3); mToolbar = (Toolbar) findViewById(R.id.toolbar); //解决低版本4.4+的虚拟导航栏的 View nav = findViewById(R.id.navagation); setSupportActionBar(mToolbar); setOrChangeTranslucentColor(mToolbar, nav, Color.BLUE);}@SuppressLint("NewApi")public void setOrChangeTranslucentColor(Toolbar toolbar, View bottomNavigationBar, int translucentPrimaryColor) { //判断版本,如果[4.4,5.0)就设置状态栏和导航栏为透明 if (isFitVerson()) { if (toolbar != null) { //1.先设置toolbar的高度 ViewGroup.LayoutParams params = toolbar.getLayoutParams(); int statusBarHeight = getStatusBarHeight(); params.height += statusBarHeight; toolbar.setLayoutParams(params); //2.设置paddingTop,以达到状态栏不遮挡toolbar的内容。 toolbar.setPadding( toolbar.getPaddingLeft(), toolbar.getPaddingTop() + getStatusBarHeight(), toolbar.getPaddingRight(), toolbar.getPaddingBottom()); //设置顶部的颜色 toolbar.setBackgroundColor(translucentPrimaryColor); } if (bottomNavigationBar != null) { //解决低版本4.4+的虚拟导航栏的 if (hasNavigationBarShow(getWindowManager())) { ViewGroup.LayoutParams p = bottomNavigationBar.getLayoutParams(); p.height += getNavigationBarHeight(); bottomNavigationBar.setLayoutParams(p); //设置底部导航栏的颜色 bottomNavigationBar.setBackgroundColor(translucentPrimaryColor); } } } else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { getWindow().setNavigationBarColor(translucentPrimaryColor); getWindow().setStatusBarColor(translucentPrimaryColor); } else { //<4.4的,不做处理 }}//判断是否是合适的低版本private boolean isFitVerson() { return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP;}/** * 判断是否有导航栏 * @param wm * @return */@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)private boolean hasNavigationBarShow(WindowManager wm){ Display display = wm.getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); //获取整个屏幕的高度 display.getRealMetrics(outMetrics); int heightPixels = outMetrics.heightPixels; int widthPixels = outMetrics.widthPixels; //获取内容展示部分的高度 outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); int heightPixels2 = outMetrics.heightPixels; int widthPixels2 = outMetrics.widthPixels; LogUtils.e(heightPixels); LogUtils.e(heightPixels2); int w = widthPixels-widthPixels2; int h = heightPixels-heightPixels2; LogUtils.e(h); return w>0||h>0;//竖屏和横屏两种情况。}/** * 获取状态栏的高度 * * @return */private int getStatusBarHeight() { return getSystemComponentDimen("status_bar_height");}//虚拟导航栏的private int getNavigationBarHeight() { return getSystemComponentDimen("navigation_bar_height");}public int getSystemComponentDimen(String dimenName) { /** * 获取状态栏高度——方法1 * */ int statusBarHeight1 = -1; //获取status_bar_height资源的ID (String name, String defType, String defPackage) int resourceId = getResources().getIdentifier(dimenName, "dimen", "android"); if (resourceId > 0) { //根据资源ID获取响应的尺寸值 statusBarHeight1 = getResources().getDimensionPixelSize(resourceId); } return statusBarHeight1;}
}
阅读全文
0 0
- Android 在低版本4.4以上 动态设置状态栏和底部导航栏的背景色
- android沉浸状态栏和顶部状态栏背景色的设置
- Android修改状态栏和导航栏背景色
- 解决 设置导航栏背景色 和影响状态栏的颜色 问题
- 设置导航栏背景色和view背景色
- DrawerLayout 在 Android 4.4 和 Android 5.0 以上实现沉浸状态栏和导航栏的方法
- 导航栏设置背景色底部线条颜色字体大小颜色
- 状态栏 导航栏 tabbar背景色&字体颜色设置
- 设置导航栏的背景色和标签栏的背景色
- 设置导航栏的背景色
- iOS导航栏和底部tabbar的隐藏和背景色
- 改变iOS中的导航栏和状态栏 的背景色和字体颜色
- 设置状态栏背景色
- Android 禁止下拉状态栏和底部导航栏的控制
- Android 禁止下拉状态栏和底部导航栏的控制
- 对系统版本为4.4及以上的开启 透明状态栏和导航栏(即沉浸式状态栏)
- 设置导航背景色
- coordinatelayout android:fitsSystemWindows 沉浸式状态栏在android4.4 和 4.4以上版本的坑
- 小程序支付绑定服务号支付步骤,微信小程序支付绑定商户号支付
- Ubuntu用户、用户组管理命令
- AT&T汇编学习总结二-汇编语言程序范例
- 主成分分析与因子分析的区别
- Java Struts2 POI创建Excel文件并实现文件下载
- Android 在低版本4.4以上 动态设置状态栏和底部导航栏的背景色
- Scala-高阶函数
- Elasticsearch(十)elasticsearch分布式文档存储
- 提取点云中的树干,路灯等圆柱体
- wmconcat乱码
- 关于为什么进行Revit二次开发的理解
- vue-router2
- Java内存区域与内存溢出异常
- 并查集详解 (转)