美文网首页
Android——布局技巧

Android——布局技巧

作者: 四喜汤圆 | 来源:发表于2020-04-12 22:27 被阅读0次

    一、作用

    二、概念使用

    1.抽象布局标签

    布局优化-Trinea

    (1)<include>标签

    将布局中的公共部分抽象出来供其他 layout 共用,以实现布局模块化

    该标签唯一需要的属性是layout属性,指定需要包含的布局文件。可以定义android:idandroid:layout_属性来覆盖被引入布局根节点的对应属性。注:重新定义android:id后,子布局的顶节点就变化了

    a.布局模块化

    <include>中包含的xml在布局时,以整个手机屏幕为参考系。

    foot.xml
    // foot.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_above="@+id/tv" />
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:text="哈哈哈" />
    
    </RelativeLayout>
    

    b.引入模块化的布局

    (2)<viewStub>标签
    该标签和<include>一样,可以用来引入一个外部布局。<viewStub>引入的布局默认不会扩张,即既不会占用显示也不会占用位置,从而在解析layout 时节省 cpu 和内存。

    <viewStub>常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错时显示的提示布局等。

    【示例】
    a.将无网络出错时的提示布局模块化

    布局模块化

    b.引入主布局中

    c.在主布局中显示/隐藏

    private void showNetError() {
        if (networkErrorView != null) {
            networkErrorView.setVisibility(View.VISIBLE);
            return;
        }
        ViewStub stub = findViewById(R.id.optimization_layout_network_error);
        networkErrorView = stub.inflate();
        mSettingBtn = networkErrorView.findViewById(R.id.network_setting_btn);
        mRefreshBtn = networkErrorView.findViewById(R.id.network_refresh_btn);
    }
    
    private void showNormal() {
        if (networkErrorView != null) {
            networkErrorView.setVisibility(View.GONE);
        }
    }
    

    https://www.jianshu.com/p/40b0445477e9

    (3)<merge>标签
    在使用了<include>后可能导致布局嵌套过多,多余不必要的layout节点,从而导致解析变慢。

    该标签可用于两种典型场景:

    • 布局根节点是FrameLayout且不需要设置backgroundpadding等属性,可以用merge代替

    因为 Activity 内容视图的 parent view 就是一个 FrameLayout ,可以用merge消除一个

    • 某布局作为子布局,被其他布局include时,使用merge当做该布局的根节点

    这样在被引入时根节点会自动被忽略,而将其子节点全部合并到主布局中。

    上述foot.xml中可以用merge代替RelativeLayout

    <?xml version="1.0" encoding="utf-8"?>
    <merge xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_above="@+id/tv" />
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:text="哈哈哈" />
    
    </merge>
    

    2.布局技巧

    Android一些你需要知道的布局优化技巧

    四、参考文献

    相关文章

      网友评论

          本文标题:Android——布局技巧

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