文檔:
https://developer.android.com/guide/topics/resources/runtime-changes
https://developer.android.com/guide/topics/ui/multi-window.html#lifecycle
- 分屏模式下可強(qiáng)制應(yīng)用橫屏尿褪,所以注意應(yīng)用內(nèi)強(qiáng)制豎屏的頁(yè)面適配橫屏顯示
- 分屏模式下,獲取應(yīng)用所占用的寬高
getResources().getConfiguration().screenWidthDp
getResources().getConfiguration().screenHeightDp
- 多窗口變更通知和查詢
//Activity 提供以下方法來(lái)支持多窗口顯示:
isInMultiWindowMode()
//調(diào)用該方法以確認(rèn) Activity 是否處于多窗口模式:
onMultiWindowModeChanged()
- 應(yīng)用聲明使用多窗口
<application
android:allowBackup=“true”
android:resizeableActivity=“true“ //只能在24以及24以上的手機(jī)生效
- 聲明config
<activity
android:name=".MainActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
- 重寫方法
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
/獲取應(yīng)用的窗口大小
int w_window = getResources().getConfiguration().screenWidthDp;
int h_window = getResources().getConfiguration().screenHeightDp;
/獲取應(yīng)用的窗口大小,根據(jù)刷新的應(yīng)用window寬度,動(dòng)態(tài)調(diào)整應(yīng)用的布局
… …
}
如果應(yīng)用必須進(jìn)行重新走生命周期來(lái)以響應(yīng)屏幕切換,需要進(jìn)行狀態(tài)的保存和恢復(fù)篮迎。
您可以通過(guò)onSaveInstanceState()和ViewModel對(duì)象來(lái)進(jìn)行之前狀態(tài)保存和后續(xù)的恢復(fù)。
即,在銷毀activity之前乓搬,通過(guò)onSaveInstancesState()存儲(chǔ)狀態(tài), 在onCreate() o或者
onRestoreInstanceState()進(jìn)行狀態(tài)的恢復(fù)代虾。
- 某些系統(tǒng) UI 自定義選項(xiàng)將被禁用进肯;例如,在非全屏模式中棉磨,應(yīng)用無(wú)法隱藏狀態(tài)欄
所以應(yīng)用在分屏模式下需要把關(guān)鍵控件放在狀態(tài)欄下方區(qū)域顯示江掩,否則可能出現(xiàn)應(yīng)用布局
被狀態(tài)欄遮擋的問(wèn)題,適配建議:
獲取系統(tǒng)狀態(tài)欄高度:
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;
}