Android多窗口模式(分屏模式)

article/2025/9/15 17:23:19

Android N 支持多窗口模式,或者叫分屏模式,即在屏幕上可以同时显示多个窗口。

在手机模式下,两个应用可以并排或者上下同时显示,如图 1 所示,屏幕上半部分的窗口是系统的 CLOCK 应用,下半部分是系统设置功能。用户可以拖动两个应用之间的分界线改变两个窗口的大小,放大其中一个应用,同时缩小另一个应用。
 

分屏模式
图 1  分屏模式


在分屏模式下,各个窗口的应用都可以正常运行,但是只能有一个窗口获得焦点,而另外的窗口则属于暂停状态。

Android N 用户可以通过以下方式切换到多窗口模式:

  • 用户打开 Overview 屏幕并长按 Activity 标题,可以拖动该 Activity 至屏幕突出显示的区域,使 Activity 进入多窗口模式。
  • 用户长按 Overview 按钮,设备上当前的 Activity 将进入多窗口模式,同时将打开 Overview 屏幕,用户可在该屏幕中选择要共享屏幕的另一个 Activity。


用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间拖放数据。

默认情况下,Android N 的 Activity 都是开启多窗口模式的。在 Nexus 6P 手机上,分屏模式的启动和退出是长按多任务虚拟按键。

图 2 在 Nexus 6P 上启动分屏模式的样子:

Nexus 6P分屏模式
图 2  Nexus 6P 分屏模式


首先我们在 MainActivity 上添加一个按钮,并实现点击打开第二个 Activity 的功能,代码如下:

 
  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. Button btn = findViewById(R.id.button);
  7. btn.setOnClickListener(new View.OnClickListener() {
  8. @Override
  9. public void onClick(View view) {
  10. Intent intent = new Intent(MainActivity.this, Main2Activity.class);
  11. startActivity(intent);
  12. }
  13. });
  14. }
  15. }

点击“新窗口”按钮后,第二个窗口会被创建,并覆盖掉第一个窗口,如图 3 所示。
 

新窗口
图 3  新窗口


默认情况下,同一个应用的多个 Activity 会共用同一个窗口,且无法分配到不同窗口中。

若希望同一个应用的不同窗体可以被分配到不同窗口中,需要在启动新窗体时给 Intent 设置一个 FLAG_ACTIVITY_LAUNCH_ADJACENT 标志,这样新 Activity 就会在新的栈中被启动,独立于原来的 Activity,进而实现两个 Activity 被放置于不同的窗口中,如图 4 所示。

同一个应用的两个窗口
图 4  同一个应用的两个窗口

关键代码如下:

 
  1. Intent intent = new Intent(MainActivity.this, Main2Activity.class);
  2. intent.setFlags(Intent.FLAG_ACTIVITY_LAUNGH_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK);
  3. startActivity(intent);


Android N 系统为 Activity 增添了<layout> 清单元素对 Activity 在多窗口模式中的行为进行支持,包括以下几种属性:

属性作用
android:defaultWidth以自由形状模式启动时 Activity的默认宽度
android:defaultHeight以自由形状模式启动时 Activity的默认高度
android:gravity以自由形状模式启动时 Activity的初始位置
gravity 的值:center(居中),bottom(下),top(上),right(右),left(左)
android:minimalHeight、android:minimalWidth分屏和自由形状模式中 Activity的最小高度和最小宽度。如果用户在分屏模式中移动分界线,使Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。


例如,以下代码显示了如何指定 Activity 在自由形状模式显示时 Activity 的默认大小、位置和最小尺寸:

 
  1. <activity android:name=".MyActivity">
  2. <layout android:defaultWidth="600dp"
  3. android:defaultHeight="500dp"
  4. android:gravity="top|end"
  5. android:minmalHeight="450dp"
  6. android:minimalWidth="300dp"/>
  7. </activity>

如果不想让 Activity 使用多窗口模式,只需要在清单文件中为 Activity 节点设置:

android:resizeableActivity="false"

此属性设置为 false,Activity 将不支持多窗口模式。在该值为 false 的情况下,如果用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。可自行尝试。


http://chatgpt.dhexx.cn/article/3dxJZLIX.shtml

相关文章

git 命令怎么创建新分支?

问题 比如&#xff1a;我们要以 dev 分支创建一个 test-branch 分支。 解决 1、在本地创建一个 test-branch 分支&#xff0c;并切换到该分支。 git checkout -b test-branch执行完&#xff0c;可以使用下面命令查看是否创建了该本地分支 git branch -a2、把分支推到远程仓…

git命令之快速搭建远程仓库

首先使用系统管理员账号登录远程服务器&#xff0c;具体步骤如下所示&#xff1a; 1 安装git应用程序 sudo apt-get install git 2 创建git用户组和git用户&#xff0c;具体命令如下所示&#xff1a; groupadd git adduser git -g git 3 修改git用户默认shell为git-shell…

Git命令常用操作 代码拉取和提交

常规的git命令就是以下几个语句 项目首次拉取 git clone 项目地址url拉取并同步代码到本地 git pull将本地所有更改的文件添加到缓存区 git add .添加备注&#xff0c;方便之后查看历史提交记录 git commit -m "本次提交备注信息"提交到git仓库 git push

git命令之新建仓库

一. 配置git用户名 1&#xff09;安装git&#xff0c;配置用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email "你的注册邮箱" 2&#xff09;使用git config --global --list查看配置 二. 工作区操作 1&#x…

常见Git命令使用

常见Git命令使用 1.初始化创库 git init 2.git status 这个命令顾名思义就是查看状态&#xff0c; 这个命令可以算是使用最频繁的一个命令了&#xff0c; 建议大家没事就输入下这个命令&#xff0c; 来查看你当前 git 仓库的一些状态。 3.git add 文件名 将文件添加到git仓库…

git命令拉取代码

流程 1在本地clone项目【保持与远程仓库一致】 此时已绑定远程仓库 git clone xxxx2.添加文件 3.放到暂存区 git add .4.提交到本地仓库 git commint -m "提示信息"5推送到远程仓库 git push origin master其他命令 分支命令 分支就是每个人开发 互不影响 之后…

Git 命令之stash

Git 命令之stash 前言1 stash1.1 描述1.2 应用场景命令使用 前言 使用 Git 作为代码版本管理&#xff0c;早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送&#xff0c;遇到一些commit管理的问题就束手无策&#xff0c;或者用一些不优雅的方式…

git命令登录

1. 执行登陆用户名和密码命令 git config --global user.email "youexample.com" git config --global user.name "Your Name"2. 生成密钥对 ssh-keygen -t rsa -C "your_emailyouremail.com"3. 配置公钥私钥 然后将 .ssh/id_rsa.pub中的内容复…

git命令详解

一、简介 git作为应用广泛的一种分布式版本控制系统&#xff0c;其与svn比较最大的差别就是一个是分布式&#xff0c;一个是集中式&#xff0c;git在每个开发者的本地有一个完整的版本库&#xff0c;当在本地处理工作时&#xff0c;无需联网便可修改提交&#xff0c;当需要与其…

关于Git这一篇就够了

目录 前言 发展过程 集中式与分布式的区别 Debian/Linux安装Git 配置git环境&#xff1a;git config --global 创建本地空仓库&#xff1a;git init 新建文件添加到本地仓库&#xff1a;git add、git commit -m 改写提交&#xff1a;git commit --amend 查看历史提交日…

【信号与系统】—知识点:自由响应、强迫响应、暂态响应、稳态响应、零输入响应、零状态响应如何区分!

自由响应、强迫响应、暂态响应、稳态响应、零输入响应、零状态响应如何区分&#xff01; 一、系统的响应划分 二、自由响应、强迫响应 自由响应和强迫响应是从数学上来分解的&#xff0c;没有什么物理意义&#xff0c;自由响应是齐次解&#xff0c;因为它的形式和激励无关&am…

一阶电路的零状态响应

零状态响应就是电路在零初始状态下(动态元件初始储能为零)由外施激励引起的响应。 RC电路的零状态响应 在t0时刻&#xff0c;开关S闭合&#xff0c;电路接入直流电压源US。根据KVL&#xff0c;有 uRuCUS (KVL ∑u0 指定回路的绕行方向是顺时针的&#xff0c;R、C的电压参考方向…

MATLAB:零状态响应(lsim(连续);filter(离散))、冲激响应(impulse或impz)和阶跃响应(step)、卷积(conv)

例1&#xff1a;求系统y(t)2y(t)100y(t)10x(t)的零状态响应&#xff0c;已知x(t)sin(2pt)u(t)。【连续时间系统零状态响应】 例2&#xff1a;求系统y(t)2y(t)100y(t)10x(t)的零状态响应&#xff0c;已知x(t)d(t)。&#xff08;ts0;te5;dt0.01&#xff09;【连续时间系统冲激响应…

连续系统的时域分析(一)LTI连续系统微分方程解法3——零状态响应的求解方法

(一)零状态响应的定义 零状态响应是系统在初始状态为零时&#xff0c;仅有输入信号 f ( t ) f(t) f(t)引起的响应。用 y z s ( t ) y_{zs}(t) yzs​(t)表示 &#xff08;二&#xff09;解题步骤 &#xff08;1&#xff09;当微分方程右端不含冲击函数 δ ( t ) \delta(t) δ…

《信号与系统》连续时间系统零状态响应的 MATLAB 实现

3.5.1 连续时间系统零状态响应的 MATLAB 实现 参考书籍 《信号与系统》 Matlab 库函数中的 **lsim()**能对微分方程描述的 LTI 连续时间系统的响应进行仿真。 lsim(b,a,x,t) 该调用格式中&#xff0c;a 和 b 是由描述系统的微分方程左边和右边系数构成的两个行向量&#xff…

Matlab计算信号和的卷积,求解微分方程的阶跃响应、冲激响应和零状态响应

参考资料&#xff1a; 连续时间系统的时域分析涉及到的Matlab函数&#xff1a; step&#xff1a;用于计算连续时间系统的单位阶跃响应。 impulse&#xff1a;用于计算连续时间系统的单位冲激响应。 lsim&#xff1a;用于计算连续系统在任意输入作用下的响应。 dsolve&…

实验二 信号与系统Matlab 求系统的冲激响应、阶跃响应、零状态响应

** 实验二 ** 实验内容 题目一&#xff1a; clear all; ts0;te5;dt0.01; num[0 3 2]; den[1 5 6]; systf(num,den); tts:dt:te; yimpulse(sys,t); plot(t,y);grid;xlabel(time(sec));ylabel(h(t))题目二&#xff1a; clear all; ts0;te5;dt0.01; num[0 0 1]; den[2 1 8];%…

二阶电路的零状态响应

二阶电路零状态响应公式推导 下图所示电路在 时电容和电感上储能都为零&#xff0c;即 &#xff0c; &#xff0c; t0 时开关闭合&#xff0c;电压源 Us 开始对电路供电。现讨论 时响应的变化规律。 电路的 KVL 方程为换路后电路的初始状态为 0 &#xff0c;即&#xff0c; …

【Matlab】系统的响应分析

前言 一个信号系统课程中使用Matlab对系统的零状态响应、零输入响应、完全响应、冲激响应、阶跃响应求解、波形生成以及分析的实验。 一、内容 设系统的微分方程为&#xff1a; 激励为&#xff1a; 起始状态条件为&#xff1a; 、 可求得 零输入响应&#xff1a; 零状…

一阶电路零输入和零状态响应

零状态响应 以RC电路为例 目的&#xff1a;求响应。也就是Uc 步骤&#xff1a; 列KVL。因为含有动态元件&#xff0c;所以是微分方程。 解微分方程就能得到Uc。*是一阶线性&#xff0c;套公式就能得到通解。 特解&#xff08;强制分量&#xff09;&#xff1a;与输入激励的变化…