文档:
https://developer.android.com/guide/topics/resources/runtime-changes
https://developer.android.com/guide/topics/ui/multi-window.html#lifecycle
- 分屏模式下可强制应用横屏,所以注意应用内强制竖屏的页面适配横屏显示
- 分屏模式下,获取应用所占用的宽高
getResources().getConfiguration().screenWidthDp
getResources().getConfiguration().screenHeightDp
- 多窗口变更通知和查询
//Activity 提供以下方法来支持多窗口显示:
isInMultiWindowMode()
//调用该方法以确认 Activity 是否处于多窗口模式:
onMultiWindowModeChanged()
- 应用声明使用多窗口
<application
android:allowBackup=“true”
android:resizeableActivity=“true“ //只能在24以及24以上的手机生效
- 声明config
<activity
android:name=".MainActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
- 重写方法
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
/获取应用的窗口大小
int w_window = getResources().getConfiguration().screenWidthDp;
int h_window = getResources().getConfiguration().screenHeightDp;
/获取应用的窗口大小,根据刷新的应用window宽度,动态调整应用的布局
… …
}
如果应用必须进行重新走生命周期来以响应屏幕切换,需要进行状态的保存和恢复。
您可以通过onSaveInstanceState()和ViewModel对象来进行之前状态保存和后续的恢复。
即,在销毁activity之前,通过onSaveInstancesState()存储状态, 在onCreate() o或者
onRestoreInstanceState()进行状态的恢复。
- 某些系统 UI 自定义选项将被禁用;例如,在非全屏模式中,应用无法隐藏状态栏
所以应用在分屏模式下需要把关键控件放在状态栏下方区域显示,否则可能出现应用布局
被状态栏遮挡的问题,适配建议:
获取系统状态栏高度:
public static int getStatusBarHeight(Context context) {
int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height",
"dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}