文档章节

Android分屏多窗口实践

zhang555
 zhang555
发布于 2017/01/09 15:42
字数 572
阅读 522
收藏 31

Android N 中推出了多窗口支持,项目要求适配多窗口模式,记录一下。
1.生命周期:对于完全没有适配多窗口的APP来说,当启用多窗口模式或者拖动窗口时,会出现Activity销毁重新加载的现象。 解决方法:在manifest文件里面给activity加上下面一行属性

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

2.当启用多窗口模式时,可能有改变原UI的需求,这时可以在代码里面修改:

 @Override
    public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
        super.onMultiWindowModeChanged(isInMultiWindowMode);
        //在此处根据isInMultiWindowMode来适配多窗口UI
    }

onMultiWindowModeChanged在Activity,fragment里面都有,会在多窗口模式变化的时候调用该方法。不过注意了,当已经是多窗口模式时,进入新页面,并不会调用该方法。那怎么办呢?可以用下面这个方法来判断当前是否是多窗口状态,最低兼容SDK版本是24:

Activity().isInMultiWindowMode()

可以用Activity的这个方法判断。当是多窗口时隐藏或者显示某些布局。

3.如果要在拖动多窗口的过程中,动态改变布局,可以在manifest文件里面对相应的activity配置,例如:

 <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和权重:

<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参数中有很多信息,就有当前应用的宽高信息。

@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		int screenWidthDp=newConfig.screenWidthDp;
		int screenHeightDp=newConfig.screenHeightDp;
       //根据宽高动态改变布局
	}

最后推荐:Android官方文档

© 著作权归作者所有

上一篇: 我的2016年终
下一篇: Java类初始化顺序
zhang555
粉丝 10
博文 81
码字总数 29189
作品 0
朝阳
程序员
私信 提问
Google:Android Q 要实现分屏应用多开

尽管许多国产厂商的定制系统早已加入了分屏、画中画的支持,但是谷歌直到安卓7.0“牛轧糖”系统才加入原生分屏支持,在安卓8.0“奥利奥”中加入了对“画中画”的支持。不过,这些支持也难以称...

达尔文
2018/11/13
2.9K
11
Chrome OS 的分屏功能或支持与安卓应用程序一起运行

谷歌整合 Chrome OS 与 Android 的意图越来越明显了,他们希望最终让你在分屏模式下使用 Android 应用程序。 这不是 Chrome OS 的全新功能,因为目前你可以在平板电脑模式下使用分屏窗口。不...

局长
2018/01/27
2.1K
2
Android N 最令人期待的 10 大新功能

不久,谷歌将正式发布Android N,它有超过250个新功能。安卓粉有福了。很多新功能的目标都是使Android体验更快,更愉快,更富有成效。下面是我们最期待的十大新特性。 01.多窗口模式 在计算机...

oschina
2016/05/22
7.7K
19
App启动流程,Activity启动及AMS分析

AMS分析「 Activity启动流程 」- https://www.jianshu.com/p/501690f88f68 -- Activity启动及AMS分析: 在activity A中点击button启动activity B调用了 Activity的startActivity方法。1. Ac......

desaco
04/16
0
0
Android Nougat 最值得期待的五项新功能

今天,Google终于确认了Android 7.0的官方名字--牛轧糖(Nougat),该系统将会在今年秋季正式推出。伴随着新版本的上线必然涌现出很多新的功能,外媒SlashGear就盘点了即将出现在Android Nou...

oschina
2016/07/02
4.4K
9

没有更多内容

加载失败,请刷新页面

加载更多

db.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=falsejdbc.username=rootjdbc.pas......

行者终成事
31分钟前
4
0
从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践

在 2019 年之前,之家的大部分实时业务都是运行在 Storm 之上的。Storm 作为早期主流的实时计算引擎,凭借简单的 Spout 和 Bolt 编程模型以及集群本身的稳定性,俘获了大批用户。下图是实时计...

阿里云官方博客
32分钟前
4
0
网络安全-Day04

2.1.1 什么是SQL注入 2.1.2 注入分类 2.1.3 MySQL手工注入 2.1.4 sqlmap使用 2.1.5 总结 什么是SQL注入 SQL注入漏洞原理 什么是SQL 结构化查询语言(Structured Query Language),是一种特殊目...

Jerry1101
32分钟前
3
0
docker容器内安装yum,vim等命令,以及配置ls指令

使用国内镜像 mv /etc/apt/sources.list /etc/apt/sources.list.bakecho "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.listecho "deb http://......

长恭
32分钟前
3
0
超详细的MySQL8.0.17版本安装教程

下载MySQL MySQL的官网地址:https://www.mysql.com/。 如下图所示: 然后点击DOWNLOADS ==> Community,选择MySQL Community Server。如图所示: 滑到页面的最下面,找到Recommended Downl...

彩色泡泡糖
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部