Android——布局技巧

2020-04-12  本文已影响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节点,从而导致解析变慢。

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

因为 Activity 内容视图的 parent view 就是一个 FrameLayout ,可以用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一些你需要知道的布局优化技巧

四、参考文献

上一篇 下一篇

猜你喜欢

热点阅读