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

智能推荐

【OpenCV】初识OpenCV(简介、windows下安装及其开发部署)_windows安装opencv-程序员宅基地

文章浏览阅读7k次,点赞9次,收藏65次。详细介绍了OpenCV及其在windows编译环境中的详细安装部署_windows安装opencv

端口和适配器架构——DDD好帮手_端口适配器架构 代码-程序员宅基地

文章浏览阅读860次。摘要本文源自2018领域驱动设计中国峰会《领域驱动设计与演进式架构专题》的Session之一,是其博客版在实践领域驱动设计时,可以挑选一些方法互为参照,端口和适配器架构概念简单,容易掌握,适合作为实践领域驱动设计的辅助方法。大概一个月前,在做2018年领域驱动设计大会预告的时候,上一届大会的主题演讲者肖然提出这样的担忧:工具和方法似乎没有很好地解决“落地难”的挑战没有一套方法能够打遍..._端口适配器架构 代码

古月居教程之:“robot_marm”包直接编译出错_github guyueju-程序员宅基地

文章浏览阅读418次,点赞4次,收藏2次。使用古月居的“robot_marm”包直接编译出错在ubuntu18,自己建的工作空间里面,将“ros_exploring-master”整个功能包拉进去工作空间编译发生报错,因为只需要用到“robot_marm”这个包(跟着书上做机械臂仿真),但是只用这个包也报错,就找了下解决方法。其中是因为少了两个数据结构的包,git clone到工作空间的src文件夹下就好了。git clone https://github.com/ros-interactive-manipulation/manipulati_github guyueju

5、JSP面试题总结-程序员宅基地

文章浏览阅读2.5k次。文章目录1、静态包含和动态包含的区别2、jsp有哪些内置对象?作用分别是什么?1、静态包含和动态包含的区别语法:静态包含:include指令是静态包含,静态包含的意思就是:把文件的代码内容都包含进来,再编译!<%@ include file=""%>动态包含:include行为是动态包含。其实include行为就是封装了request.getRequestDispatcher(String url).include(request,response) <jsp: include _jsp面试

google vr 入门之制作简易的VR播放器(三),android学生管理系统项目视频_自己的android app中集成vr浏览器-程序员宅基地

文章浏览阅读192次。// 使用google vr 添加的compile ‘com.google.vr:sdk-base:1.40.0’compile ‘com.google.vr:sdk-audio:1.40.0’compile ‘com.google.vr:sdk-videowidget:1.40.0’添加这些依赖包之后google给我们的生成了哪些library库呢?![](https://img-blog.csdn.net/20170427162756208?watermark/2/text/aHR0cDovL_自己的android app中集成vr浏览器

db和dbm_it dbm-程序员宅基地

文章浏览阅读1.8k次。DB :DB是一个纯计数单位:dB = 10logX。dB的意义其实再简单不过了,就是把一个很大(后面跟一长串0的)或者很小(前面有一长串0的)的数比较简短地表示出来。如:X = 1000000000000000(多少个了?)= 10logX = 150 dB X = 0.000000000000001 = 10logX = -150 dB DB在缺省情况下总是定义功率单位,以 1_it dbm

随便推点

思科 下一跳_二层交换机下一跳命令-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏6次。命令如下 仅供参考A :Router>enable Router#conf terminal Enter configuration commands, one per line. End with CNTL/Z.Router(config)#interface gigabitEthernet 0/0Router(config-if)#ip address 192.168.1..._二层交换机下一跳命令

IFeatureClass接口_list<ifeatureclass>-程序员宅基地

文章浏览阅读3.7k次。IFeatureClass用于访问控制要素类行为和属性的成员IFeatureClass接口是获取和设置要素类属性的主要接口。例如,使用IFeatureClass接口获取要素类类型、获取满足查询条件的要素数目或在要素类中创建新要素。IFeatureClass接口继承了IObjectClass接口。成员AddField 向这个类中添加一个字段。AddIndex _list

利用Mysql into outfile给网站留后门-程序员宅基地

文章浏览阅读9.6k次。Mysql into outfile使用Mysql into outfile语句,可以方便导出表格的数据。同样也可以生成某些文件。因此有些人会利用sql注入生成特定代码的文件,然后执行这些文件。将会造成严重的后果。Mysql into outfile 生成PHP文件SELECT 0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3

商业智能软件对比评测: FineBI 和 Tableau -程序员宅基地

文章浏览阅读358次。FineBI和Tableau是比较好的自助式商业智能软件,功能都很强大,是企业数据可视化不可或缺的利器,但两款产品还是有非常大的区别的,例如Tableau的功能全面且深入,更适合专业的数据分析人员,而FineBI则是面向普通的业务人员,数据分析过程更人性化,更简单和易用,并为企业提供了全面的数据管理和用户管理策略。下面对这两款商业智能软件做个对比评测。一、产品理念FineBI是帆软公司推出的自助..._centos7安装finebi

JQuery Ajax Maven [A]_ajaxmaven-程序员宅基地

文章浏览阅读190次。2020 JQuery Ajax Maven Spring MyBatis [A]JQuery + JQueryAjaxJQuery + JQueryAjax 1: JQueryJQuery + JQueryAjax 2: JQueryAjaxMavenSpringMVC MyBatisSpringMVC MyBatis 1: SpringMVCSpringMVC MyBatis 2: MyBatisSpringMVC MyBatis 3: MavenSpringMVC MyBatis 4: Spring_ajaxmaven

通信原理与MATLAB(八):2PSK的调制解调_psk解调-程序员宅基地

文章浏览阅读1.9w次,点赞60次,收藏310次。通信原理和MATLAB_psk解调

推荐文章

热门文章

相关标签