Android动态加载布局(fragment限定符的使用)
来源:互联网 发布:android ndk r9d mac 编辑:程序博客网 时间:2024/05/22 00:14
摘抄自<第一行代码>,以此作为笔记(还有一个原因是因为懒):
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,所以可以放心地使用它。
- Android动态加载布局(fragment限定符的使用)
- 【Android】56、动态加载布局的技巧——使用限定符
- 【Android】56、动态加载布局的技巧——使用最小宽度限定符
- android Fragment动态加载的使用详解
- Fragment的限定符
- android (二) -fragment 的动态加载
- Android使用addView动态加载布局文件
- android Fragment 懒加载布局
- Android笔记(8)---Fragment的使用(静态加载,动态加载)
- Android中的Fragment——02(Fragment的动态加载)
- Fragment的动态加载
- Android 动态加载布局
- Android 动态加载布局
- Android 动态加载布局
- Android 动态加载布局
- Android 动态加载布局
- Android 动态加载布局
- Android 动态加载布局
- 浅谈手机卫士之程序锁
- 如何解决ajax跨域问题(转)
- HDU2066 一个人的旅行(dijkstra算法)
- Sublime:打造Go编辑器并配合使用terminal编译运行golang程序
- 直线,折线,曲线分割平面以及平面分割空间问题
- Android动态加载布局(fragment限定符的使用)
- Java开发控制台程序的输入输出
- C++与C语言的不同(一)
- 记录一个多核CPU负载不均衡问题
- git学习-历史回滚
- Android视频
- 【Android】56、动态加载布局的技巧——使用最小宽度限定符
- Unity3D-旧版AssetBundle相关API介绍
- Web综合应用实验(html css javascript)