Android 全面屏的那些适配方法
版权申明:未经允许请勿转载。转载前请先联系作者(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">- "android:windowFullscreen"
>true- "android:windowContentOverlay">@null
- "android:navigationBarColor" tools:ignore="NewApi">@color/colorBackground
style>
2.1.3 小结
- 通过设定主题,改变单Activity的navigationBarColor。
- 使用transparentStatusBar中的设置,将状态栏透明化
- 使用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上的回答好像也不能如愿。
找了许久终于摸清楚设置,所以留下方法。
玩~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
