【安卓学习之常见问题】 Android 屏幕适配2 -- 全面屏适配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljb568838953/article/details/80139988

█ 【安卓学习之常见问题】 Android 屏幕适配2 – 全面屏适配

█ 相关文章:

 ● 【安卓学习之常见问题】 Android 屏幕适配
 ● 【安卓学习之常见问题】 Android 屏幕适配2 – 全面屏适配
 ● 【安卓学习之常见问题】 Android 屏幕适配3 – 启动页/引导页适配

█ 问题:

 ● 今天将app安装在,小米MIX2(android 8.0.0)上,发现App的应用界面和底部虚拟导航按键之间有条很粗的黑线:
这里写图片描述
这里写图片描述
 ● 打开其他几个应用,发现都没有,大部分虚拟导航都在底部,且显示为白色!
 ● 这个问题只出现在android 8.0.0以上的全面屏手机!

█ 百度:

 ● 先百度下,找下相关的问题【android 底部导航 为白色】
这里写图片描述

 ● 浏览了几篇文章,见【相关资料】,方法大致就是:
   方法1:直接继承android.support.v7.app.AppCompatActivity。
   方法2:使用getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);适配底部导航栏。
   PS1:FLAG_TRANSLUCENT_NAVIGATION只是让底部导航为透明,会导致底部导航显示黑底    
   PS2:使用getWindow().setNavigationBarColor();可以将底部导航修改为其他颜色      
   PS3:使用FLAG_TRANSLUCENT_STATUS可以适配顶部状态栏  

█ 实验:

 ● 1.在所有的Activity的onCreate(Bundle savedInstanceState)中,在setContentView(int layoutResID)之后,加上:

    // 适配顶部状态栏
    context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    // 适配底部导航栏
    context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

这里写图片描述
 ● 2.运行结果,遗憾的是,底部还是黑色的:
这里写图片描述
这里写图片描述

这里写图片描述
 ● 3.修改底部导航栏的颜色(没效果 ):

  // 适配底部导航栏颜色
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setNavigationBarColor(Color.parseColor("#1bb5d7"));
    }

   PS1:变量【Build.VERSION_CODES.LOLLIPOP】需要在API21以上才能识别    
   PS2:方法【getWindow().setNavigationBarColor();】需要在API21以上才能识别      
  setNavigationBarColor说明:

Call requires API level 21 (current min is 19): android.view.Window#setNavigationBarColor

这里写图片描述

需要在project.properties文件中,修改为target=android-21
在AndroidManifest.xml文件中,修改为
< uses-sdk android:minSdkVersion=”21” android:targetSdkVersion=”21” />
如果android:minSdkVersion想设置小于21,那么就根据提示,在前面加上NewApi即可!
   PS:测试过【getWindow().setNavigationBarColor();】没有效果,底部导航还是黑底白图
  

█ 总结:

 ● 需要将每个界面重新添加适配顶部状态栏和底部导航栏的初始化代码:

   // 适配顶部状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    // 适配底部导航栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    // 适配底部导航栏颜色
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setNavigationBarColor(Color.parseColor("#1bb5d7"));
    }

 这里写图片描述
 ● 工作量有点大,可以弄个静态工具类,当然最好以前每个Activity都继承BaseActivity,那么就直接在BaseActivity中修改就好了
 

█ 20180519补充:

 ● PS:以下是打包好的三个供eclipse版本使用的android-support-v7包,其中【android-support-v7-appcompat_00.0.0_20150325.zip】 不知道是哪个版本的,【android-support-v7-appcompat_23.1.1_20151124.rar】是23.1.1版android6.0,【android-support-v7-appcompat_26.1.0_20170913.zip】是26.1.0版android8.0
这里写图片描述

下载地址:android-support-v7-appcompat(含23和26)_20180518.zip-CSDN下载(注意修改编译条件) 

 ● 修改状态栏的颜色:android.view.Window.setStatusBarColor(int arg0)有效的条件:
   1. 要引入android-support-v7-appcompat_23.1.1库,才有效(\project.properties)

android.library.reference.1=../../../../android-support-v7-appcompat_23.1.1_20151124/appcompat

   2. 修改Activity的主题:(\res\values\styles.xml)

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here.标题栏、状态栏、 CheckBox的颜色 -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

   3. 修改编译环境,API 23 即Android 6.0(\project.properties)

target=android-23

 ● 修改导航栏的颜色: android.view.Window.setNavigationBarColor(int arg0)有效的条件:
   1. 要引入android-support-v7-appcompat_26.1.0库,才有效(\project.properties)

android.library.reference.1=../../../../android-support-v7-appcompat_26.0.1_20170913/android-support-v7-appcompat26

   2. 修改Activity的主题:(\res\values\styles.xml)

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here.标题栏、状态栏、 CheckBox的颜色 -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

   3. 修改编译环境,API 26 即Android 8.0.0 (\project.properties)

target=android-26

█ 相关资料:

 ● 1.2016-01-22 Android 沉浸式状态栏的三种实现方式 - wuyinlei的博客 - CSDN博客
 ● 2. 2016-03-20 Android-transulcent-status-bar 单设置沉浸式状态栏,三句话搞定| Jianqiu’s blog
 ● 3.2016-06-17 使用Eclipse实现Android 的沉浸式状态栏 - jiyidehao的博客
RSS订阅C - SDN博客

 ● 4.2016-11-10 Android状态栏一体化(沉浸式)的实现(Eclipse版) - Ae_fring的博客 - CSDN博客
 ● 5.2016-12-06 Android沉浸式状态栏(透明状态栏)最佳实现 - CSDN博客
 ● 6.2017-03-13 Android中Activity和AppcompatActivity的区别 - CSDN博客
 ● 7.2016-06-22 Android开发技巧——设置系统状态栏颜色 - 貌似掉线的博客 - CSDN博客
 ● 7.2016-12-11 android中fitsSystemWindows的用处 - zyjzyj2的博客 - CSDN博客
 ● 8.2017-06-30 StatusBarUtil 状态栏工具类(实现沉浸式状态栏/变色状态栏) - lixuce1234的博客 - CSDN博客
 ● 9.2017-07-10 Android 设置应用的底部导航栏(虚拟按键)背景颜色 - CSDN博客
 ● 10.2017-11-29 手淘启动页全面屏和虚拟键适配 - 陆云帆 - CSDN博客
 ● 11.2017-12-01 Android全面屏如何做适配
 ● 12.2018-01-02 Android全面屏适配指南 - NeilYi007的博客 - CSDN博客
 ● 13.2018-03-19 关于android 7.0全面屏,底部虚拟导航键 适配问题 - CSDN博客

转载请注明出处:
http://blog.csdn.net/ljb568838953/article/details/80139988

猜你喜欢

转载自blog.csdn.net/ljb568838953/article/details/80139988