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 中一些常见的限定符:
限定符
2 最小宽度限定符
有时候我们希望可以更加灵活地为不同设备加载布局, 不管它们是不是被系统认定为 large , 这时就可以使用最小宽度限定符 (Smallest-width Qualifier) 啦 O(_)O~
最小宽度限定符可以对屏幕的宽度指定一个最小值(以 dp 为单位), 然后以这个最小值为临界点, 屏幕宽度大于这个值的设备就加载一个布局, 屏幕宽度小于这个值的设备就加载另一个布局
如果在 res 目录下新建 layout-sw600dp 文件夹, 并在这个文件夹下新建 activity_fragment .xml 布局文件
这样当程序运行在屏幕宽度大于 600dp 的设备上时, 会加载 layout-sw600dp/activity_fragment 布局, 而当程序运行在屏幕宽度小于 600dp 的设备上时, 则仍然会加载默认的 layout/activity_fragment 布局
来源: http://www.jianshu.com/p/9a84369c4af8