Android布局优化----ViewStub、include、merge

简介:

1 StubView

作用:StubView标签中的布局只有在需要的时候才会被渲染加载。

注意:StubView的渲染加载操作只能执行一次;不支持merge标签

使用示例:

(1)ViewStub中引用的布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout
     android:id = "@+id/stublayout"
     xmlns:android = "http://schemas.android.com/apk/res/android"
     android:orientation = "vertical"  android:layout_width = "match_parent"
     android:layout_height = "match_parent" >
 
     < TextView
         android:id = "@+id/sbtv"
         android:layout_width = "300dp"
         android:layout_height = "300dp"
         android:text = "this is sub text view" />
 
</ LinearLayout >

(2)使用ViewStub

1
2
3
4
5
< ViewStub
     android:id = "@+id/viewstub"
     android:layout_width = "100dp"
     android:layout_height = "100dp"
     android:layout = "@layout/sublayout" />

(3)java代码中渲染加载

1
2
3
4
ViewStub stub = (ViewStub)findViewById(R.id.viewstub);
stub.inflate();
TextView stubtv = (TextView)layout.findViewById(R.id.sbtv);
stubtv.setText( "hello stub!" );


2 include标签

作用:将引用的布局替换到当前布局中该标签所处的位置;

注意:引用的布局非merge,设置inlude的id属性后会覆盖掉引用布局顶层layout的id;

示例1 引用布局非merge

(1)引用布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:id = "@+id/sharedlayout2"
     android:layout_width = "200dp"
     android:layout_height = "200dp"
     android:background = "@android:color/black" >
 
     < TextView
         android:id = "@+id/mytv"
         android:layout_width = "100dp"
         android:layout_height = "100dp"
         android:background = "@android:color/holo_blue_light"
         android:text = "这时一个公用的布局" />
 
</ LinearLayout >

(2)使用include标签

1
2
3
4
5
<include
     android:id= "@+id/include1" <!--该id会覆盖布局( 1 )中LinearLayout的id;-->
     layout= "@layout/my"
     android:layout_width= "50dp"
     android:layout_height= "50dp" ></include>

(3)java中使用

1
2
3
LinearLayout sharedlayout = (LinearLayout) findViewById(R.id.include1);
TextView tv = (TextView) sharedlayout.findViewById(R.id.mytv);
tv.setText( "hello include1" );

示例2 引用merge布局

(1)引用布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
< merge  xmlns:android = "http://schemas.android.com/apk/res/android" >
 
     < LinearLayout
         android:id = "@+id/mergetlayout"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" >
 
         < TextView
             android:id = "@+id/mergetv1"
             android:layout_width = "40dp"
             android:layout_height = "40dp"
             android:background = "@android:color/holo_blue_bright"
             android:text = "merge text1"  />
 
         < TextView
             android:id = "@+id/mergetv2"
             android:layout_width = "40dp"
             android:layout_height = "40dp"
             android:background = "@android:color/darker_gray"
             android:text = "merge text2"  />
     </ LinearLayout >
</ merge >

(2)include标签:merge布局没有id属性,所以这里的id其实没有意义

1
2
3
< include
     android:id = "@+id/include2"
     layout = "@layout/mymerge" ></ include >

(3)java中使用

1
2
3
4
5
//LinearLayout layout = (LinearLayout)findViewById(R.id.include2);//通过该代码无法获取(1)                                                    中的LinearLayout,这里的layout为null
TextView mTV1 = (TextView)findViewById(R.id.mergetv1);
mTV1.setText( "hello merge tv1" );
TextView mtv2 = (TextView)findViewById(R.id.mergetv2);
mtv2.setText( "hello merge tv2" );

3 merge标签

    merge标签相当于控件的简单集合,被include到其他布局中后根据所处容器布局结合各个控件的相关属性进行布局。

注意:merge标签没有id属性

使用示例:

(1)merge布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< merge  xmlns:android = "http://schemas.android.com/apk/res/android" >
 
 
     < TextView
         android:id = "@+id/mergetv1"
         android:layout_width = "40dp"
         android:layout_height = "40dp"
         android:background = "@android:color/holo_blue_bright"
         android:text = "merge text1"  />
 
     < TextView
         android:id = "@+id/mergetv2"
         android:layout_width = "40dp"
         android:layout_height = "40dp"
         android:background = "@android:color/darker_gray"
         android:text = "merge text2"  />
</ merge >

此时的布局为两个textview重叠并且mergetv2处于上层;

(2)merge标签使用

1
2
3
< include
     android:id = "@+id/include2"
     layout = "@layout/mymerge" ></ include >

(3)由于该include标签处于一个竖直的linearlayout中,此时merge布局的显示效果如下:

merge text 1
merge text 2
(4)java中使用
1
2
3
4
TextView mTV1 = (TextView)findViewById(R.id.mergetv1);
mTV1.setText( "hello merge tv1" );
TextView mtv2 = (TextView)findViewById(R.id.mergetv2);
mtv2.setText( "hello merge tv2" );

















本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1847175  ,如需转载请自行联系原作者




相关文章
|
13天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
3天前
|
Android开发
Android Makefile中inherit-product函数和include的区别
Android Makefile中inherit-product函数和include的区别
8 0
|
11天前
|
缓存 监控 API
Android应用性能优化实践
【4月更文挑战第30天】 随着智能手机的普及,用户对移动应用的性能要求越来越高。对于Android开发者而言,提升应用的性能是吸引和保留用户的关键因素之一。本文将深入探讨影响Android应用性能的主要因素,并提供一系列的优化策略,旨在帮助开发者构建更加流畅和高效的应用体验。
|
11天前
|
移动开发 调度 Android开发
构建高效Android应用:Kotlin协程的实践与优化
【4月更文挑战第30天】在移动开发领域,性能和响应性是衡量应用质量的关键指标。对于Android平台而言,Kotlin协程作为一种新兴的异步编程解决方案,提供了更为简洁和高效的处理并发任务的能力。本文将深入探讨Kotlin协程的核心原理,以及如何通过它们来提升Android应用的性能。我们将从基础概念出发,逐步介绍协程的创建、管理以及与Android UI线程的交互,并最终展示如何优化现有代码以利用协程的优势。
|
12天前
|
移动开发 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优化实践
【4月更文挑战第29天】在移动开发领域,尤其是Android平台上,性能优化一直是开发者关注的重点。近年来,Kotlin语言凭借其简洁性和功能性成为Android开发的热门选择。其中,Kotlin协程作为一种轻量级的并发处理机制,为编写异步代码、网络请求和数据库操作提供了极大的便利。本文将深入探讨Kotlin协程在Android应用中的性能优化技巧,帮助开发者构建更加高效的应用程序。
|
12天前
|
移动开发 API Android开发
Android应用性能优化实战
【4月更文挑战第28天】在移动开发领域,一个流畅的用户体验是至关重要的。对于Android开发者而言,应用的性能优化是一项既挑战性也极其重要的工作。本文将深入探讨Android应用性能优化的多个方面,包括内存管理、UI渲染、多线程处理以及电池效率等,旨在为开发者提供实用的性能提升策略和具体的实施步骤。通过分析常见的性能瓶颈,并结合最新的Android系统特性和工具,我们的目标是帮助读者打造更加高效、响应迅速的Android应用。
|
14天前
|
缓存 监控 Android开发
Android 应用性能优化实战
【4月更文挑战第27天】 在竞争激烈的移动应用市场中,性能优越的应用更能吸引和保留用户。针对Android平台,本文将深入探讨影响应用性能的关键因素,并提供一系列实用的优化策略。我们将从内存管理、UI渲染、多线程处理以及电池使用效率等方面入手,通过具体案例分析如何诊断常见问题,并给出相应的解决方案。文中所提技巧旨在帮助开发者构建更加流畅、高效的Android应用。
24 2
|
17天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
Android开发
Android抽象布局——include、merge 、ViewStub
转自:http://blog.csdn.net/xyz_lmn/article/details/14524567   在布局优化中,Androi的官方提到了这三种布局、、,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记。
783 0