版权申明:未经允许请勿转载。转载前请先联系作者(hello@yeshen.org)

原本以为只是很简单的功能。虽然最后发现确实是简单的功能。
但是前前后的调整接近一天,这里留下记录,如何处理吧。

一、无边界的屏幕

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// transparent-status-bar: https://stackoverflow.com/a/31596735getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

使用上面的设置之后,状态栏(status-bar)和虚拟导航栏(Navigation)就都透明得盖在内容之上,屏幕可操作区域延伸到最大,不管是全面屏还是普通屏的手机。

二、三星的全面屏幕

<application>...<meta-dataandroid:name="android.max_aspect"android:value="2.4" />
</application>

2.1 三星的全面屏幕+隐藏状态栏(transparent status-bar)+特殊颜色虚拟导航栏(Navigation)

2.1.1 工具类
public static void cutoutScreenMode(final Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {WindowManager.LayoutParams lp = activity.getWindow().getAttributes();lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;activity.getWindow().setAttributes(lp);}
}
public static void transparentStatusBar(final Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {activity.getWindow().setStatusBarColor(activity.getResources().getColor(android.R.color.transparent));}View view = activity.getWindow().getDecorView();if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {view.setSystemUiVisibility(View.GONE);} else {int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY| View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;view.setSystemUiVisibility(uiOptions);}
}
2.1.2 如何调用

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);NavigationUtil.transparentStatusBar(this);NavigationUtil.cutoutScreenMode(this);
}

AndroidMainfest.xml

<application>...<activityandroid:name=".MainActivity"android:screenOrientation="portrait"android:theme="@style/AppTheme.FullScreenWithDarkNavigation"></activity>
</application>

styles.xml

<style name="AppTheme.FullScreenWithDarkNavigation"><item name="android:windowFullscreen">true</item><item name="android:windowContentOverlay">@null</item><item name="android:navigationBarColor" tools:ignore="NewApi">@color/colorBackground</item>
</style>
2.1.3 小结
  1. 通过设定主题,改变单Activity的navigationBarColor。
  2. 使用transparentStatusBar中的设置,将状态栏透明化
  3. 使用cutoutScreenMode中的设置,把显示区域最大化

2.2 三星的全面屏幕+隐藏状态栏(transparent status-bar)+ 隐藏虚拟导航栏(Navigation)

2.2.1 工具类
public static void hideSystemNavigationBar(final Activity activity) {View view = activity.getWindow().getDecorView();if (Build.VERSION.SDK_INT < 19) {view.setSystemUiVisibility(View.GONE);} else {int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY| View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;view.setSystemUiVisibility(uiOptions);}
}
2.2.2 如何调用

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);NavigationUtil.hideSystemNavigationBar(this);NavigationUtil.cutoutScreenMode(this);
}

三、小结

可以看到,这些大多是系统预留的设置,实际上查查API文档就能知道怎么设置。
留这篇文章是因为API文档看了之后云里雾里 : ( 。
看stackoverflow上的回答好像也不能如愿。
找了许久终于摸清楚设置,所以留下方法。

玩~

Android 全面屏的那些适配方法相关推荐

  1. 小米android 18比9黑边,Android 全面屏黑边适配

    问题: 全面屏底部会出现黑边 原因: 全面屏宽高比例比较特殊,不是之前的16:9.例如小米mix2s,屏幕宽高比是18:9.Android默认支持的最大宽高比例是1.86,小于全面屏手机的宽高比例.所 ...

  2. Android 全面屏黑边适配

    问题: 全面屏底部会出现黑边 原因: 全面屏宽高比例比较特殊,不是之前的16:9(默认1.86 准确点应该是16.7:9).例如小米mix2s,屏幕宽高比是18:9.Android默认支持的最大宽高比 ...

  3. android 小米8底部黑色高度太高,Android 全面屏黑边适配

    问题: 全面屏底部会出现黑边 原因: 全面屏宽高比例比较特殊,不是之前的16:9(默认1.86 准确点应该是16.7:9).例如小米mix2s,屏幕宽高比是18:9.Android默认支持的最大宽高比 ...

  4. Android 全面屏处理(适配挖孔屏、刘海屏) kotlin

    测试机: Android 11 的 Xiaomi MI MAX 3 Android 12 的 Xiaomi K40 Pro 测试方法: 1. 该方法在api30后提示已经过时 在onCreat()方法 ...

  5. Android全面屏最大纵横比适配

    遇到的问题 在项目开发中遇到屏幕底部或顶部出现了黑条,页面没有全部占满屏幕,情况如下: 解决方案 影响因素: 1 项目 targetSdkVerion 值 2 项目是否支持分屏模式: 如果设置了and ...

  6. Android全面屏适配问题:华为p40

    华为p40,android 全面屏适配问题: 解决方案: AndroidManifest.xml里面如下几处修改: <?xml version="1.0" encoding= ...

  7. Android 全面屏手机view出现绿色边框

    Android 全面屏手机view出现绿色边框 在公司的华为P20手机上出现此情况,参考了https://my.oschina.net/u/3959253/blog/1941582发现好像其他的全面屏 ...

  8. Android全面屏适配笔记

    由于现在的刘海屏.穿孔屏越来越多,所以现在针对这些屏幕的适配工作也越来越麻烦.有必要自己记录一份适配笔记了,防止以后要用的时候在网上找不到. (这是在没有做任何适配的情况下,直接运行老代码的效果.可以 ...

  9. android 刘海机型适配,Android全面屏刘海适配

    maxAspectRatio 根据谷歌兼容性(CTS)标准要求,应用必须按以下方式中的任意一种,在AndroidManifest.xml中配置方可全屏显示,否则将以非全屏显示. 方式一:配置支持最大高 ...

最新文章

  1. 0x01.基本算法 — 位运算
  2. GDCM:gdcm::Sorter的测试程序
  3. 个人博客系统分享(可打包直接上云)
  4. SAP Spartacus organization unit list抬头显示所有unit的标题实现
  5. CVPR 2021 Oral | Transformer!UP-DETR:无监督预训练检测器
  6. Windows XP Home Edition安裝 IIS 的方法
  7. 【Java中的网络编程】
  8. 备战数学建模10-主成分分析模型与因子分析模型
  9. Bandicam软件及安装教程(详细)
  10. 电脑软件:推荐一款磁盘空间分析工具——WizTree
  11. Android实现 Eq的频响曲线,可以调节峰值,高低通。曲线为算法实现。
  12. 【wps word 页眉横线删除】
  13. Apache ShenYu(原 soul) 网关 整合 nacos
  14. IOS ipv6测试
  15. Java 交互小实例:(ATM机模拟、饮料自助机模拟)
  16. 【IO专栏】Java OIO NIO通信对比分析【002】
  17. 火车票飞机票,点击切换按钮切换出发城市和到达城市
  18. 硬盘提示格式化的解决办法:
  19. 用中文把玩Google开源的Deep-Learning项目word2vec
  20. CTreeCtrl的HitTest用法

热门文章

  1. 2020最新泛目录程序(豪侠泛目录全自动推送)
  2. python list去重 set和list互转
  3. YZ新版本个人总结 2016.9.2
  4. 巴黎圣母院有人痛心,伊拉克博物馆有谁记得
  5. FPGA Fanout-Fanin(扇入扇出)
  6. 7-5 Shuffling Machine (20分)
  7. 懒癌患者的学习记录之JAVA快速排序代码
  8. 浏览器F12定位悬浮下拉框元素
  9. python3 str与bytes转换,定义bytes类型
  10. CAS:178744-28-0,mPEG-DSPE,DSPE-mPEG,甲氧基-聚乙二醇-磷脂酰乙醇胺试剂供应