Android-布局优化(include , merge , ViewStub)

本文深入讲解Android中的五大布局,包括RelativeLayout、LinearLayout等的特点与应用场景,并介绍include、merge和ViewStub等高级布局技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.回顾

   上篇 学习 SeekBar  的知识 ,前面还 学习了 Android 的 五大布局知识 ,做了了解;文章地址:

    安卓五大布局-http://blog.youkuaiyun.com/lablenet/article/details/47863171

2. 重点

   (1)五大布局再讨论

   (2)include 

   (3)merge

   (4)ViewStub

3.五大布局优缺点 和使用 情况

    已使用的情况以大到下排列:

   (1)RelativeLayout 

                 灵活性高,易于使用

   (2)LinearLayout

                  线性的,垂直和水平; 布局层次一样的情况下,使用 线性布局,性能 高

   (3)FrameLayout

                布局叠加

   (4)TableLayout

                 被Gridview 代替

   (5)AbsoluteLayout

                几乎不使用

4. include

   (1)将各复用的组件 抽取出来 通过 include 标签使用

   (2)将公用的组件放在单独的xml文件中,使用  <include /> 标签引入

   (3)列子

   新建common_title 布局文件:

<?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="wrap_content" 
    android:background="#abcdef"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14px"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_centerVertical="true"
        android:text="返回" />
  <TextView
        android:id="@+id/textView4"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18px"
        android:text="主页" />
  
    <TextView
        android:id="@+id/textView5"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14px"
        android:text="设置" />
    
</RelativeLayout>

    在 activity_mian.xml 中引入:

    <include layout="@layout/common_title" />

  效果图(刚刚的是 上面的 title ):

                                                   


    include 引入的 布局中的 控件式可以使用的;


5.merge

   (1)合并Ui布局 ,    降低 UI布局 嵌套层次
   (2)merge 等同于 framelayout 可以取代和替代 FrameLayout

   (3)例子:就是 上面效果图中的 环形进度条

    新建 common_progress.xml

<?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"
 >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/tv_s"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="请稍后" />

</merge>

      在 activity_main.xml 中引入

<include layout="@layout/common_progress" />

  (4)使用 merge 的时候需要几点注意

        其父布局 ,只能有 layout_width 和 layout_height 不能有其他修饰


6.ViewStub 

  (1) 惰性加载 :它引入的布局 ,只有在触发的时候,才去加载,而不是像 include 直接加载过来,减少了 cpu和内存的压力;

  (2)新建common_text.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是隐藏内容" />

</LinearLayout>
  

  (3)在 activity_main.xml 中声明 Viewstub 标签

    注意 :这里引入的 布局文件的时候是 android:layout="" ; 和 include 不一样;

 <ViewStub 
        android:id="@+id/stub"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="300dp"
        android:layout="@layout/common_text"
     />

  (4)业务实现

          初始化控件包括 ViewStub ;

          使用 viewStub的 inflate() 方法加载 ;效果 如上图所示!!!!

	btn_viewStub=(Button)findViewById(R.id.btn_viewStub);
		viewStub=(ViewStub) findViewById(R.id.stub);
		btn_viewStub.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				viewStub.inflate();
			}
		});


7.demo 免积分下载

   你没点击错误,就是它! 可拖动滚动条实现
   http://download.youkuaiyun.com/detail/lablenet/9046135














  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值