美文网首页
动态加载布局

动态加载布局

作者: TTTqiu | 来源:发表于2016-04-22 12:15 被阅读225次

一、使用限定符(Qualifiers)


  • 很多的平板应用现在都采用的是双页模式(程序会在左侧的面板上显示一个包含子项的列表,在右侧的面板上显示内容),因为平板电脑的屏幕足够大,完全可以同时显示下两页的内容,但手机的屏幕一次就只能显示一页的内容,因此两个页面需要分开显示。
  • 那么怎样才能在运行时判断程序应该是使用双页模式还是单页模式呢?这就需要借助限定符(Qualifiers)来实现了。
1. 修改 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>
2. 在 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>
  • 其中 large 就是一个限定符
  • 屏幕被认为是 large 的设备就会自动加载 layout-large 文件夹下的布局。
  • 而小屏幕的设备则还是会加载 layout 文件夹下的布局。
3. 在平板上运行:
4. 在手机上运行:
5. 常见限定符:
屏幕特征 限定符 描述
大小 small 提供给小屏幕设备的资源
大小 normal 提供给中等屏幕设备的资源
大小 large 提供给大屏幕设备的资源
大小 xlarge 提供给超大屏幕设备的资源
分辨率 ldpi 提供给低分辨率设备的资源(120dpi 以下)
分辨率 mdpi 提供给中等分辨率设备的资源(120dpi 到160dpi)
分辨率 hdpi 提供给高分辨率设备的资源(160dpi 到240dpi)
分辨率 xhdpi 提供给超高分辨率设备的资源(240dpi 到320dpi)
方向 land 提供给横屏设备的资源
方向 port 提供给竖屏设备的资源

二、使用最小宽度限定符(Smallest-width Qualifier)


  • 有的时候我们希望可以更加灵活地为不同设备加载布局, 不管它们是不是被系统认定为 “ large ”, 这时就可以使用最小宽度限定符(Smallest-width Qualifier)了。
  • 最小宽度限定符允许我们对屏幕的宽度指定一个最小指(以 dp 为单位),然后以这个最小值为临界点。
  • 屏幕宽度大于这个值的设备就加载一个布局。
  • 屏幕宽度小于这个值的设备就加载另一个布局。
1. 新建 layout-sw600dp 文件夹。
2. 当程序运行在屏幕宽度大于 600dp 的设备上时,会加载 layout-sw600dp/activity_main 布局。
3. 当程序运行在屏幕宽度小于 600dp 的设备上时,则仍然加载默认的 layout/activity_main 布局。

相关文章

  • 动态布局LayoutInflater.inflate() 方法解

    我们开发时,有时候会有动态加载布局的需求,A情况加载一个布局,B情况加载另一个布局。 下面简单介绍一下动态布局涉及...

  • 优化Activity启动流程

    1、采用动态布局: 优化布局,减少层级嵌套,再不行就使用动态加载. 2、利用MessageQueue.IdleHa...

  • 动态加载布局

    一、使用限定符(Qualifiers) 很多的平板应用现在都采用的是双页模式(程序会在左侧的面板上显示一个包含子项...

  • Binary XML file line #19: Attemp

    APP中需要实现LayoutInflater布局加载器动态加载布局,然而开启程序一运行就闪退。。。 于是上CSDN...

  • Fragment

    1.Fragment加载到Activity的两种方法:(1)静态加载,布局中;(2)动态加载,通过fragment...

  • Android

    1.LayoutInflater 动态加载资源布局,加载自定义组件等 2.Notification 3.Pendi...

  • Android LayoutInflater inflate()

    之前在动态加载一个布局时用 View.inflate() 去加载,最后没加载出来,换为 LayoutInflate...

  • 解决布局加载那些奇奇怪怪的事🤣

    1.引言 在 Android中,我们需要动态添加View的时候,通常会先去加载布局,那加载布局的方式一般有以下两...

  • 操作系统(2)---- 可执行文件布局

    静态布局和动态布局 这里分析可执行文件,静态布局是指可执行文件在存储器上的内部结构,动态布局是指程序被加载到内存上...

  • iOS逆向之fishHook原理探究

    HOOK原理 1、MachO是被谁加载的? DYLD动态加载 2、ASLR技术(地址空间布局随机化):MachO文...

网友评论

      本文标题:动态加载布局

      本文链接:https://www.haomeiwen.com/subject/axhxrttx.html