Android动态加载布局(fragment限定符的使用)_android 布局加载fragment-程序员宅基地

技术标签: android  

摘抄自<第一行代码>,以此作为笔记(还有一个原因是因为懒):












4.4 动态加载布局的技巧
虽然动态添加碎片的功能很强大,可以解决很多实际开发中的问题,但是它毕竟只是在
一个布局文件中进行一些添加和替换操作。如果程序能够根据设备的分辨率或屏幕大小在运
行时来决定加载哪个布局,那我们可发挥的空间就更多了。因此本节我们就来探讨一下
Android 中动态加载布局的技巧。
4.4.1 使用限定符
如果你经常使用平板电脑,应该会发现很多的平板应用现在都采用的是双页模式(程序
会在左侧的面板上显示一个包含子项的列表,在右侧的面板上显示内容),因为平板电脑的
屏幕足够大,完全可以同时显示下两页的内容,但手机的屏幕一次就只能显示一页的内容,
第 2 章 先从看得到的入手,探究活动
173
因此两个页面需要分开显示。
那么怎样才能在运行时判断程序应该是使用双页模式还是单页模式呢?这就需要借助
限定符(Qualifiers)来实现了。我们通过一个例子来学习一下它的用法,修改 FragmentTest
项目中的 activity_main.xml 文件,代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/left_fragment"
android:name="com.example.fragmenttest.LeftFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
这里将多余的代码都删掉,只留下一个左侧碎片,并让它充满整个父布局。接着在 res
目录下新建 layout-large 文件夹,在这个文件夹下新建一个布局,也叫做 activity_main.xml,
代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/left_fragment"
android:name="com.example.fragmenttest.LeftFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/right_fragment"
android:name="com.example.fragmenttest.RightFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3" />
</LinearLayout>
第一行代码 —— Android
174
可以看到,layout/activity_main 布局只包含了一个碎片,即单页模式,而 layout-large/
activity_main 布局包含了两个碎片,即双页模式。其中 large 就是一个限定符,那些屏幕被认
为是 large 的设备就会自动加载 layout-large文件夹下的布局,而小屏幕的设备则还是会加载
layout 文件夹下的布局。
然后将 MainActivity 中按钮点击事件的代码屏蔽掉,并在平板模拟器上重新运行程序,
效果如图 4.13 所示。
图 4.13
再启动一个手机模拟器,并在这个模拟器上重新运行程序,效果如图 4.14 所示。
图 4.14
第 2 章 先从看得到的入手,探究活动
175
这样我们就实现了在程序运行时动态加载布局的功能。
Android 中一些常见的限定符可以参考下表。
屏幕特征 限定符 描述
大小
small 提供给小屏幕设备的资源
normal 提供给中等屏幕设备的资源
large 提供给大屏幕设备的资源
xlarge 提供给超大屏幕设备的资源
分辨率
ldpi 提供给低分辨率设备的资源(120dpi以下)
mdpi 提供给中等分辨率设备的资源(120dpi到 160dpi)
hdpi 提供给高分辨率设备的资源(160dpi到 240dpi)
xhdpi 提供给超高分辨率设备的资源(240dpi到 320dpi)
方向
land 提供给横屏设备的资源
port 提供给竖屏设备的资源
4.4.2 使用最小宽度限定符
在上一小节中我们使用 large 限定符成功解决了单页双页的判断问题,不过很快又有一
个新的问题出现了,large 到底是指多大呢?有的时候我们希望可以更加灵活地为不同设备加
载布局,不管它们是不是被系统认定为“large”,这时就可以使用最小宽度限定符
(Smallest-width Qualifier)了。
最小宽度限定符允许我们对屏幕的宽度指定一个最小指(以 dp 为单位),然后以这个最
小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就
加载另一个布局。
在 res 目录下新建 layout-sw600dp 文件夹,然后在这个文件夹下新建 activity_main.xml
布局,代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/left_fragment"
android:name="com.example.fragmenttest.LeftFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
第一行代码 —— Android
176
android:layout_weight="1" />
<fragment
android:id="@+id/right_fragment"
android:name="com.example.fragmenttest.RightFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3" />
</LinearLayout>
这就意味着,当程序运行在屏幕宽度大于 600dp 的设备上时,会加载 layout-sw600dp/
activity_main 布局,当程序运行在屏幕宽度小于 600dp 的设备上时,则仍然加载默认的
layout/activity_main 布局。
需要注意一点,最小宽度限定符是在 Android 3.2 版本引入的,由于这里我们最低兼容
的系统版本是 4.0,所以可以放心地使用它。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/OnionOmelette/article/details/53179173

智能推荐

虚拟直播软件成为直播必备工具,实景直播和虚拟直播区别在哪里?-程序员宅基地

文章浏览阅读224次。虚拟直播与各行业的结合愈发紧密,技术的革新让很多线上活动可以通过虚拟直播完成。

java 轨迹平滑算法_地图坐标轨迹平滑和纠偏-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏19次。轨迹平滑和纠偏纠偏通过gps获取坐标点时 因为gps信号不稳定等原因 出现坐标点异常 不符合实际 进行异常点的处理 来对轨迹纠正轨迹偏移不正常取得轨迹坐标集合 对此段轨迹设置起点和终点 取得相邻两坐标点 计算出两点之间距离 对比获取坐标点的时间 判断坐标时速异常 对坐标点移除处理代码逻辑异常点去除之后轨迹 轨迹平滑处理实现思路方法1.百度地图鹰眼服务:源码主要实现思路:计算相邻坐标点之间距离 通过..._java地图轨迹去重

C语言程序实例100个_程序编程案例-程序员宅基地

文章浏览阅读761次。【程序29】题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。程序分析:学会分解出每一位数,如下解释:2.程序源代码:main( )a=x/10000;分解出万位分解出千位分解出百位分解出十位/ e=x%10;分解出个位/ if (a!else if (b!else if (c!else if (d!else if (e!【程序30】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。_程序编程案例

新手如何有效避免Pybind11使用的各种坑【undefine symbol xxx, dynamic module does not define xxx等】_pybind11报错-程序员宅基地

文章浏览阅读1.2k次,点赞21次,收藏19次。新手使用pybind11的过程中遇到的一些坑及解决办法!_pybind11报错

Linux串口调试助手_linux 串口调试助手-程序员宅基地

文章浏览阅读3.1k次。基于网上资料对相关概念做整理汇总,部分内容引用自文后文章。_linux 串口调试助手

(附源码)ssm基于微信小程序的社区老人健康管理服务系统的设计与实现 毕业设计011513_基于微信小程序的社区管理系统设计论文-程序员宅基地

文章浏览阅读2k次,点赞7次,收藏30次。对于本社区老人健康管理服务系统的设计来说,通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。社区老人健康管理服务系统使用Java语言,采用基于MVVM模式的SSM技术进行开发,使用 Eclipse 2017 CI 10 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介,配合前台HTML+CSS 技术完成系统的开发。具体根据社区老人健康管理服务系统的现状来进行开发的,具体根据用户需求实现社区老人健康管理服务系统网络化的管理,各类信息有序地进行存储...._基于微信小程序的社区管理系统设计论文

随便推点

基于java的健身房管理系统设计与实现_java能查看用户的健身情况的健身管理系统-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏18次。基于Java的健身房管理系统性能评估是对系统在特定工作负载下的响应速度和资源利用率进行评估和分析,旨在验证系统是否能够满足用户在实际使用中的性能需求。1、并发性能评估:并发性能是指系统在多用户同时访问的情况下的表现。通过模拟多个用户同时进行操作,评估系统的并发性能。可以观察系统是否能够正确处理并发请求,同时保持较好的响应速度。通过增加并发用户数,可以评估系统的并发处理能力和性能瓶颈。通过性能测试工具和性能监控工具,可以测量系统在不同并发负载下的响应时间、吞吐量和资源利用率。_java能查看用户的健身情况的健身管理系统

Haddop:HA高可用_haddp 高可用-程序员宅基地

文章浏览阅读1.1w次。Hadoop集群的高可用:HDFS的HA和YARN的HA_haddp 高可用

汇编的标志寄存器_flag中psw啥意思-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏18次。它被称为FLAG,也称为PSW (Processor Status Word)。共9个标志。其中有6个状态标志位:OF、SF、ZF、AF、PF、CF,及3个控制标志位DF、IF、TF。PSW在实现IF、FOR这类需要进行条件判断的语句时非常重要。为了能熟练编程,我们需要掌握以下这些细节。(汇编里细节很重要)符号标志S(Sign Flag)。当指令执行结果的高位(字节操作中的D7位或字操作中..._flag中psw啥意思

计算机桌面输入法没有了怎么办,输入法不见了怎么办,小编教你电脑输入法不见了怎么办...-程序员宅基地

文章浏览阅读971次。一般新手在遇到这样的问题之后,会毫不犹豫的选择重启,但是重启之后依然不能解决这个问题,究竟是哪里出了问题呢?桌面输入法不见了是什么原因?该怎么修复电脑输入法不见了呢?下面,小编给大家讲解电脑输入法不见了的处理经验。输入法是电脑常见的一款软件,它可以辅助我们打出自己想写的字,但是有时候我们想要打字时,却发现输入法不见了,那么当你遇到这种情况该怎么办呢?要是你不知道怎么处理的话,就来看看小编为大伙整理..._桌面输入法不见了打不了字怎么办

python输出系统时间到文件_Python获取并输出当前日期时间-程序员宅基地

文章浏览阅读1.1k次。取得当前时间戳import timeprint time.time()格式化时间戳为标准格式print time.strftime('%Y.%m.%d',time.localtime(time.time()))获取30天前的时间(通过加减秒数来获取现在或者未来某个时间点)print time.strftime('%Y.%m.%d',time.localtime(time.time()-259200..._python 输出时间到文档里

Buck电路 (PWM实现与闭环反馈) 电力系统仿真_buck电路带反馈控制-程序员宅基地

文章浏览阅读962次,点赞2次,收藏11次。Buck电路 (PWM实现与闭环反馈) 电力系统仿真_buck电路带反馈控制