屏幕适配(刘海屏、18:9屏幕尺寸、隐藏SystemUI)

  • 刘海屏

萨瑞刘海屏API接口    <meta-data android:name="android.compatible_notch" android:value="true"/>

参考:https://developer.huawei.com/consumer/cn/devservice/doc/50114?from=timeline

  • 18:9屏幕尺寸

<application android:resizeableActivity="true">

</application>

试了下,确实可以用,但是这个属性却是分屏操作的属性,虽然解决了这个问题,但是分屏操作却开了,适配还是个问题,所以慎用.

三星S8刚出没多久,Android Developers Blog 很快就出了一篇文章:Update your app to take advantage of the larger aspect ratio on new Android flagship devices

  • 隐藏SYSTEMUI:

 WindowManager mWindowManager = (WindowManager)this.mContext.getSystemService(this.mContext.WINDOW_SERVICE); 
 WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
 wmParams.format = PixelFormat.RGBA_8888;    
 //如果设置为:
 wmParams.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.INVISIBLE | View.SYSTEM_UI_FLAG_FULLSCREEN;
 wmParams.type = WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL|WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
这样可以暂时隐藏,但是当有用户交互点击屏幕的时候,导航键就又显示出来了。

我们来看下源码里面关于SYSTEM_UI_FLAG_FULLSCREEN和SYSTEM_UI_FLAG_HIDE_NAVIGATION的注释
There is a limitation: because navigation controls are so important, the least user
     * interaction will cause them to reappear immediately.  When this happens, both
     * this flag and {@link #SYSTEM_UI_FLAG_FULLSCREEN} will be cleared automatically,
     * so that both elements reappear at the same time.
     *
     * @see #setSystemUiVisibility(int)
     */
    public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x00000002;

android系统有一个限制:因为navigation的控制是很重要的,用户交互会让它们又重新显示出来,这个时候我们设置的SYSTEM_UI_FLAG_FULLSCREEN 和SYSTEM_UI_FLAG_HIDE_NAVIGATION都会自动被清除掉,所以虚拟键又会重新出现。

redmine119459 

Google从KK开始增加了状态栏透明以及全屏界面有通知可以下拉状态栏的设计,而这个设计出现的隐患是设置了FULL_SCREEN的界面是无法禁止状态栏下拉的,这样对一些工程测试app可能会造成一定的影响,但是以google默认的设计,应用端无法修改此设计来满足自己的需求。
MTK 内部已经开发提供新的接口来实现全屏界面禁止下拉状态栏

http://192.168.3.79:8084/gitweb?p=O1_MP2/alps-release-o1.mp2-default.git;a=commitdiff;h=867ab6a7c359d01ac015c9b4c62f86529c5dab43

alps/frameworks/base/core/java/android/view/View.java          
alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java          
alps/packages/apps/FactoryDevelopX/src/com/example/factorydevelopx/MainActivity.java

猜你喜欢

转载自blog.csdn.net/u013247461/article/details/83928644