Android 布局优化(merge使用)
来源:互联网 发布:java毕业论文任务书 编辑:程序博客网 时间:2024/06/05 15:56
目的:减少布局层数
效果:减少视图树中的节点个数,加快视图的绘制,提高UI性能#
何时使用:
- 子视图不需要指定任何针对父视图的布局属性
- 假如需要在LinearLayout里面嵌入一个布局(或者视图),而恰恰这个布局(或者视图)的根节点也是LinearLayout,这样就多了一层没有用的嵌套,无疑这样只会拖慢程序速度。而这个时候如果我们使用merge根标签就可以避免那样的问题
子视图不需要指定任何针对父视图的布局属性:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="merge标签使用" /></RelativeLayout>
放到一个activity中展示,这个是一个很简单的界面就是在界面上展示一个textview
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}
我们可以看到这里是这样一个关系 Framelayout-Relativelayout-Textview
但是我们根本没有用到任何Relativelayout的特性,如果改为Linearlayout也是同样道理
我们并没有用到他们的特性,so我们可以把Framelayout,Relativelayout合并
这个时候merge就可以使用了
<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="merge标签使用" /></merge>
与之前相比 Framelayout-Relativelayout-Textview 变为了
Framelayout-Textview 少了一层Relativelayout
第二种情况 消除LinearLayout嵌套
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="activity.szgroup.wy.myactivity.MainActivity"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:clickable="true"/> <include android:id="@+id/keji" layout="@layout/pic_include" /></LinearLayout>
pic_include.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:text="@string/jsx"/> <ImageView android:id="@+id/pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/jinsixiong" /></LinearLayout>
我们可以看到 activity_main 中用到了 pic_include
并且我们的activity_main和pic_include中都是是linearlayout垂直布局
而且是LinearLayout嵌套LinearLayout这时候我们就可以用merge消除一层布局
我们将pic_include.xml修改为
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="activity.szgroup.wy.myactivity.MainActivity"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:clickable="true"/> <include android:id="@+id/keji" layout="@layout/pic_include" /></merge>
也就是用一个Linearlayout实现了原本嵌套的页面
注意事项
- merge必须放在布局文件的根节点上。
- merge并不是一个ViewGroup,也不是一个View,它相当于声明了一些视图,等待被添加。
- merge标签被添加到A容器下,那么merge下的所有视图将被添加到A容器下。
- 因为merge标签并不是View,所以在通过LayoutInflate.inflate方法渲染的时候, 第二个参数必须指定一个父容器,且第三个参数必须为true,也就是必须为merge下的视图指定一个父亲节点。
- 如果Activity的布局文件根节点是FrameLayout,可以替换为merge标签,这样,执行setContentView之后,会减少一层FrameLayout节点。
- 自定义View的时候,根节点如果需要设置成LinearLayout,建议让自定义的View点建议设置成merge,然后自定义的View
- 因为merge不是View,所以对merge标签设置的所有属性都是无效的。
merge不是view
就比如说刚才说到的linearlayout 我们消除第二个linearlayout的时候,如果我们本身linearlayout有设置背景,我们只是将linearlayout修改为merge那么是不会有背景效果的
0 0
- Android 布局优化(merge使用)
- android Merge的使用(布局的优化)
- Android布局优化 merge标签使用
- Android 布局优化merge标签的使用
- Android使用include/merge/ViewStub优化布局
- Android merge布局优化
- android布局优化-merge
- Android-布局优化(include , merge , ViewStub)
- android 布局优化(二),merge标签
- Android 性能优化 四 布局优化merge标签的使用
- android优化之布局优化-Merge标签的使用
- Android、布局优化、include、merge、
- android-布局优化:merge+include
- 使用merge标签优化布局
- 使用merge subView优化布局
- Android布局优化之<merge>与<ViewStub>标签使用
- Android布局优化之include、merge、ViewStub的使用
- Android布局优化 之 <merge>标签使用详解
- 小钻风摄像头寄存器-- uCOSIII
- Thinkphp数据的修改及删除操作
- android 源码目录结构
- Java NIO 系列教程
- Use of pushglobaltable and setfenv in Lua5.3
- Android 布局优化(merge使用)
- eigen与matlab对应函数列表
- Linux添加虚拟网卡的多种方法
- 类与类之间的关系
- 机器学习实验(八):用特征值衰减正则化方法进行深度学习实验_3
- npm cli commands - npm指令大全
- Candies poj 3159
- 经典前端面试题(三)
- JavaScript import/export