【安卓】动态加载布局技巧

文章目录

使用限定符

修改FragmentTest项目中的activity_main.xml文件

xml 复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <fragment
        android:id="@+id/leftFrag"
        android:name="com.example.fragmenttest.LeftFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

将多余的代码删掉,只留下一个左侧Fragment,并让它充满整个父布局。接着在res目录下新建layout-large文件夹,在这个文件夹下新建一个布局,也叫作activity_main.xml

xml 复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/leftFrag"
        android:name="com.example.fragmenttest.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
    <fragment
        android:id="@+id/rightFrag"
        android:name="com.example.fragmenttest.RightFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3" />
</LinearLayout>

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

java 复制代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button =(Button) findViewById(R.id.button);
        button.setOnClickListener(this);
//        replaceFragment(new RightFragment());
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.button:
                replaceFragment(new AnotherRightFragment());
                break;
            default:
                break;
        }
    }

    private void replaceFragment(Fragment fragment){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.rightFrag, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }
}
常见限定符
屏幕特征 限定符 描述
大小 small 提供给小屏幕设备的资源。
大小 normal 提供给中等屏幕设备的资源。
大小 large 提供给大屏幕设备的资源。
大小 xlarge 提供给超大屏幕设备的资源。
分辨率 ldpi 提供给低分辨率设备的资源(120 dpi以下)。
分辨率 mdpi 提供给中等分辨率设备的资源(120 dpi~160 dpi)。
分辨率 hdpi 提供给高分辨率设备的资源(160 dpi~240 dpi)。
分辨率 xhdpi 提供给超高分辨率设备的资源(240 dpi~320 dpi)。
分辨率 xxhdpi 提供给超超高分辨率设备的资源(320 dpi~480 dpi)。
分辨率 land 提供给横屏设备的资源
分辨率 pord 提供给竖屏设备的资源

使用最小宽度限定符

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

在res目录下新建layout-sw600dp文件夹,这就意味着,当程序运行在屏幕宽度大于等于600 dp的设备上时,会加载对应的布局。

相关推荐
一只乔哇噻5 分钟前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
lichong9519 分钟前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之video 的各种状态和生命周期调用说明
android·vue.js·macos
钮钴禄·爱因斯晨15 分钟前
深入剖析LLM:从原理到应用与挑战
开发语言·人工智能
知识分享小能手19 分钟前
React学习教程,从入门到精通,React 使用属性(Props)创建组件语法知识点与案例详解(15)
前端·javascript·vue.js·学习·react.js·前端框架·vue
app出海创收老李22 分钟前
海外独立创收日记(1)-我是如何从0到1在Google Play获得睡后被动收入的?
android·程序员
lang99988823 分钟前
kodi在Android4.0.4安装播放歌曲显示歌词
android·kodi·歌词插件
User_芊芊君子23 分钟前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
六点半88831 分钟前
【C++】C++11 篇二
开发语言·c++
2301_8035545232 分钟前
正向代理,反向代理,负载均衡还有nginx
java·nginx·负载均衡
要开心吖ZSH34 分钟前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师