说说 Android 中动态加载布局的实用技巧

1 使用限定符

很多平板应用使用的都是双页模式,即左侧显示列表,右侧显示内容,因为平板的屏幕足够大。但手机屏幕较小,所以一次只能显示一页的内容。

我们借助限定符(Qualifiers),可以让程序自动判断应该使用哪一种模式。

修改 如何使用 Android 的碎片 的项目中 activity_fragment.xml 的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <fragment
        android:id="@+id/left_fragment"
        android:name="net.deniro.android.fragmenttest.LeftFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />



</LinearLayout>

这里我们只留下了一个左侧碎片,并让它充满整个父布局。接着在 res 目录下新建 layout-large 文件夹,在这个文件夹下新建一个布局,也叫做 activity_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <fragment
        android:id="@+id/left_fragment"
        android:name="net.deniro.android.fragmenttest.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        />


    <fragment
        android:id="@+id/right_fragment"
        android:name="net.deniro.android.fragmenttest.RightFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"

        />


</LinearLayout>

可以看出,layout/activity_fragment 布局只包含了一个碎片,即单页模式,而 layout-large/activity_fragment 布局包含了两个碎片,即双页模式。其中 large 就是限定符,那些屏幕被认为是 large 的设备就会自动加载 layout-large 文件夹下的布局,而小屏幕的设备还是会加载 layout 文件夹下的布局。

将 Activity 中 replaceFragment() 方法注释掉,因为现在的主布局已经没有 right_layout 咯。

在平板模拟器上重新运行程序:

《说说 Android 中动态加载布局的实用技巧》 双页模式运行效果

再启动一个手机模拟器运行程序:

《说说 Android 中动态加载布局的实用技巧》 单页模式运行效果

这样我们就实现了在程序运行时动态加载布局的功能。

下面列出 Android 中一些常见的限定符——

分辨率限定符:

限定符描述
ldpi120 dpi 以下设备
mdpi120 dpi ~ 160 dpi 设备
hdpi160 dpi ~ 240 dpi 设备
xhdpi240 dpi ~ 320 dpi 设备
xxhdpi320 dpi ~ 480 dpi 设备

方向限定符:

限定符描述
land横屏设备
port竖屏设备

dpi(像素密度),是指屏幕上每英寸(1英寸 = 2.54 厘米)距离中有多少个像素点。如果屏幕为 320 * 240,屏幕长 2 英寸宽 1.5 英寸,那么 dpi = 320 / 2 = 240 / 1.5 = 160。

2 最小宽度限定符

有时候我们希望可以更加灵活地为不同设备加载布局,不管它们是不是被系统认定为 “ large ”,这时就可以使用最小宽度限定符(Smallest-width Qualifier)啦O(∩_∩)O~

最小宽度限定符可以对屏幕的宽度指定一个最小值(以 dp 为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。

如果在 res 目录下新建 layout-sw600dp 文件夹,并在这个文件夹下新建 activity_fragment .xml 布局文件。

这样当程序运行在屏幕宽度大于 600dp 的设备上时,会加载 layout-sw600dp/activity_fragment 布局,而当程序运行在屏幕宽度小于 600dp 的设备上时,则仍然会加载默认的 layout/activity_fragment 布局。

    原文作者:deniro
    原文地址: https://www.jianshu.com/p/9a84369c4af8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞