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官方文档生命周期

相关文章
相关标签/搜索