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