Android分屏多窗口實踐

Android N 中推出了多窗口支持,項目要求適配多窗口模式,記錄一下。
1.生命週期:對於徹底沒有適配多窗口的APP來講,當啓用多窗口模式或者拖動窗口時,會出現Activity銷燬從新加載的現象。 解決方法:在manifest文件裏面給activity加上下面一行屬性html

android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

2.當啓用多窗口模式時,可能有改變原UI的需求,這時能夠在代碼裏面修改:android

@Override
    public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
        super.onMultiWindowModeChanged(isInMultiWindowMode);
        //在此處根據isInMultiWindowMode來適配多窗口UI
    }

onMultiWindowModeChanged在Activity,fragment裏面都有,會在多窗口模式變化的時候調用該方法。不過注意了,當已是多窗口模式時,進入新頁面,並不會調用該方法。那怎麼辦呢?能夠用下面這個方法來判斷當前是不是多窗口狀態,最低兼容SDK版本是24:ide

Activity().isInMultiWindowMode()

能夠用Activity的這個方法判斷。當是多窗口時隱藏或者顯示某些佈局。佈局

3.若是要在拖動多窗口的過程當中,動態改變佈局,能夠在manifest文件裏面對相應的activity配置,例如:code

<activity
            android:name="com.android.multiwindowplayground.activities.MinimumSizeActivity"
            android:launchMode="singleInstance"
            android:taskAffinity="">
            <layout
                android:defaultHeight="500dp"
                android:defaultWidth="750dp"
                android:gravity="top|end"
                android:minWidth="500dp"
                android:minHeight="500dp" />
        </activity>

而後在activity的佈局文件裏面,設置線性佈局的layout_gravity和權重:xml

<LinearLayout android:id="@+id/layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_gravity="top"
        android:layout_weight="0.75">

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:textColor="@color/white" />
    </ScrollView>


    <include
        layout="@layout/logging"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_gravity="bottom"
        android:layout_weight="0.25" />
</LinearLayout>

就會在拖動的過程當中自動改變。這是Android官方的一個demo。
4.在拖動多窗口的過程當中,也能夠在代碼裏面動態設置,會調用onConfigurationChanged方法,在Configuration newConfig參數中有不少信息,就有當前應用的寬高信息。htm

@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		int screenWidthDp=newConfig.screenWidthDp;
		int screenHeightDp=newConfig.screenHeightDp;
       //根據寬高動態改變佈局
	}

最後推薦:Android官方文檔生命週期

相關文章
相關標籤/搜索