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

智能推荐

CSS中的圆角和阴影

在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。(必需值)水平阴影(horizontal shadow),可以为负值。(必需值)水平阴影(horizontal shadow),可以为负值。(必需值)垂直阴影(vertical shadow),可以为负值。(必需值)垂直阴影(vertical shadow),可以为负值。(可选值)将外(盒子的背面)阴影改为内(盒子之上)阴影。CSS3 中新增了盒子阴影,可以使用。属性为盒子添加阴影。(可选值)阴影模糊程度。(可选值)阴影模糊程度。

springcloud第4季 springcloud-alibaba之sentinel2

多语言异构化服务架构的流量治理组件,主要以流量为切入点,从。等多个维度来帮助开发者保障服务的稳定性。sentinel是面向。

OpenHarmony语言基础类库【@ohos.url (URL字符串解析)】

本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

浏览器安全之同源策略_浏览器同源策略-程序员宅基地

文章浏览阅读1.2k次。明确定义集成系统之间的接口和端点。确定HTTP请求和响应的格式,包括使用的数据编码格式(如JSON或XML),以及请求和响应的头部信息。定义HTTP的接口,首先应该确定接口功能和目标,明确接口的目的和提供的功能。确定接口所要实现的业务逻辑或服务,并理解它在整个系统中的角色和作用。然后选择HTTP方法和端点,根据接口的功能,选择合适的HTTP方法(如GET、POST、PUT、DELETE等)来表示接口的操作类型。同时,定义接口的端点(Endpoint),即接口的URL路径,例如:/api/users。_浏览器同源策略

【ARM 裸机】BSP 工程管理

ARM 裸机,BSP 工程管理,之后的工程结构一目了然,层次分明,不再乱乱了

三 STM32F4使用Sys_Tick 实现微秒定时器和延时_stm32如何实现定时器-程序员宅基地

文章浏览阅读3.3k次,点赞46次,收藏48次。时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏。_stm32如何实现定时器

随便推点

前端table组件封装_大型项目表格封装前端-程序员宅基地

文章浏览阅读277次。前端表格组件是现代Web应用程序中常见的UI控件之一,也是前端开发人员最常用的控件之一。在实际项目中,一个好的前端表格组件必须具备稳定性、易用性和扩展性等特点。因此,对于前端表格的封装技术非常重要。最后,在项目中使用前端表格组件时,需要谨慎选择。一个好的前端表格组件应该是稳定、高效和易用的,并且需要与项目架构和UI风格相匹配。_大型项目表格封装前端

如何选择最佳机器学习算法?_咱们决定采用哪种机器学习-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏18次。讲完随机森林算法之后,小冰开口问道 :“咖哥,上面的这几种经典算法,你讲得简明扼要,感觉都挺好。不过,现在的问题来了,算法一多,我反而不知道如何选择了。你能不能给我们说说,什么样的算法适合解决什么样的问题?”咖哥回答 :“这很值得说一说。没有任何一种机器学习算法,能够做到针对任何数据集都是最佳的。通常,拿到一个具体的数据集后,会根据一系列的考量因素进行评估。这些因素包括 :要解决的问题的性质、数据集大小、数据集特征、有无标签等。有了这些信息后,再来寻找适宜的算法。”让我们从下页这张 Sklearn _咱们决定采用哪种机器学习

sj定理-程序员宅基地

文章浏览阅读463次。题目类型 取石子 取到最后一粒石子就算输Anti-SG游戏决策集合为空的操作者胜其余规则与SG游戏一致这种游戏有一个特殊的解决工具:SJ定理我们先来看一下SJ定理的内容SJ定理对于任意一个Anti-SG游戏,如果定义所有子游戏的SG值为0时游戏结束,先手必胜的条件:游戏的SG值为0且所有子游戏SG值均不超过1游戏的SG值不为0且至少一个子游戏SG值超过1游戏的sg值就是nim的sg值。..._sj定理

零基础学习hadoop-知乎-程序员宅基地

文章浏览阅读67次。作者:Han Hsiao链接:https://www.zhihu.com/question/19795366/answer/24524910来源:知乎著作权归作者所有,转载请联系作者获得授权。推荐一些Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambar..._hadoop简介知乎

grpc.WithInsecure已弃用_grpc.withinsecure()-程序员宅基地

文章浏览阅读1k次。grpc.WithInsecure()已弃用_grpc.withinsecure()

人工智能技术概述_3.机器学习

广义上来说,机器学习指专门研究计算机怎么模拟或实现人类的学习行为以获取新的知识或技能的学科,使计算机重新组织已有的组织结构并不断改善自身的性能。更加精确地说,一个机器学习的程序就是可以从经验数据E中对任务T进行学习的算法,它在任务T的性能度量P会随着对于经验数据E的学习而便得更好。

推荐文章

热门文章

相关标签