安卓布局优化--ViewStub使用

在开发中很多时候回遇到这种情况,我们在一般情况下不需要在界面上显示那么多控件,但是这些控件在特殊情况下又是需要被显示的,此时ViewStub就派上用场了,话不多说,直接代码讲解

首先我们定义一个布局(就是那个时而隐藏时而显示的布局啦)  viewstub.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" >

    <EditText
        android:id="@+id/text1"
        android:hint="@string/moremsg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/text2"
        android:hint="@string/moremsg"
        android:layout_width="fill_parent"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/text3"
        android:hint="@string/moremsg"
        android:layout_width="fill_parent"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content"/>

</LinearLayout>

效果很简单,就是三个垂直排列的输入框。

接下来开始定义主布局(注意ViewStub只是一个控件,所以他的用法和Button这些没什么不同)

<LinearLayout 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"
    android:orientation="vertical"
    android:id="@+id/linear"
    tools:context="com.example.viewstub.MainActivity" >

    <EditText
        android:hint="输入姓名"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:hint="在此输入电话"
        android:layout_marginTop="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/more"
        android:textSize="25sp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="加载更多"/>

    <ViewStub
        android:id="@+id/viewstub"
        android:layout_width="fill_parent"
        android:layout="@layout/viewstub"
        android:layout_height="wrap_content"/>

</LinearLayout>

然后开始在主函数调用:

package com.example.viewstub;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewStub;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class MainActivity extends ActionBarActivity {

	private ViewStub viewstub;
	private EditText text1, text2, text3;
	private Button more;
	private int flag; // 标记是否已经展开隐藏项 1代表是
	private View layout;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		viewstub = (ViewStub) findViewById(R.id.viewstub);
		this.more = (Button) findViewById(R.id.more);
		flag = 0;
		this.more.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (flag == 0) {
					// viewstub.setVisibility(View.VISIBLE);
					if (viewstub != null) {
						View view = viewstub.inflate();
						text1 = (EditText) view.findViewById(R.id.text1);
						text2 = (EditText) view.findViewById(R.id.text2);
						text3 = (EditText) view.findViewById(R.id.text3);
						view = null;
					}
					flag = 1;
					more.setText("收起更多");
				} else {
					flag = 0;
					viewstub.setVisibility(View.INVISIBLE);
					more.setText("加载更多");
				}

			}
		});
	}

}

效果图如下:

时间: 2024-08-10 23:29:11

安卓布局优化--ViewStub使用的相关文章

Android 性能优化 三 布局优化ViewStub标签的使用

小黑与小白的故事,通过虚拟这两个人物进行一问一答的形式来共同学习ViewStub的使用 小白:Hi,小黑,ViewStub是什么?听说可以用来进行布局优化. 小黑:ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件.(更多详细的API等信息可以查看官方文档ViewStub),计算机行业一向是实践里面出真知,下面用一个例子演示下效果. 小黑:说说概念只是为了概括性的了解下,还是用个实例来演示下.先来创建一个Activity中使用的布局文件,文件名是:act

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

1 StubView 作用:StubView标签中的布局只有在需要的时候才会被渲染加载. 注意:StubView的渲染加载操作只能执行一次:不支持merge标签 使用示例: (1)ViewStub中引用的布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout     android:id="@+id/stublayout"     xmlns:android="h

安卓移动端布局优化利器include和ViewStub

当创建复杂的布局的时候,有时候会发现添加了很多的ViewGroup和View.随之而来的问题是View树的层次越来越深,应用也变的越来越慢,因为UI渲染是非常耗时的. 这时候就应该进行布局优化了.这里介绍两种方式,分别为标签和ViewStub类. 使用是为了避免代码的重复.设想一种情况,我们需要为app中的每个视图都添加一个footer,这个 footer是一个显示app名字的TextView.通常多个Activity对应多个XML布局文件,难道要把这个TextView复制到每个XML 中吗?如

【Android 开发技巧】布局优化利器&lt;include/&gt;和ViewStub

『原创作品,转载请注明出处. --- 孙国威』 [文章原始地址 http://blog.csdn.net/manoel/article/details/39036507] 当创建复杂的布局的时候,有时候会发现添加了很多的ViewGroup和View.随之而来的问题是View树的层次越来越深,应用也变的越来越慢,因为UI渲染是非常耗时的. 这时候就应该进行布局优化了.这里介绍两种方式,分别为<include>标签和ViewStub类. <include/> 使用<include

【转】Android布局优化之ViewStub

ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及特定的方法.当ViewStub使用在布局文件中时,当程序inflate布局文件时,ViewStub本身也会被解析,且占据内存控件,但是与其他控件相比,主要区别体现在以下几点: 1.当布局文件inflate时,ViewStub控件虽然也占据内存,但是相相比于其他控

Android布局优化之include、merge、ViewStub的使用

本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味着应用中任何在多个布局文件之间使用的通用布局都可以被提取出来,然后分别进行管理,使用的时候再进行组合.因此当我们在自定义一些View的时候,使用复用布局会更简单方便.在平常开发中使用可以复用的布局文件,不仅仅是因为它可以有效减少布局文件数量,更多的目的在于它更方面我们管理应用,布局复用,在更改某个组

安卓性能优化手册

本手册适合至少有初级经验的开发者查阅或复习相关知识使用,新手可能会看不懂. 1.java代码优化 1.1安卓如何执行代码 dvm:.java->.class->.dex->.apk 优化斐波那契数列: 斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+sqrt(5))/2,(1-sqrt(5))/2.所以f(n)=Ax1n+Bx2n,带入f(0)=0,f(1)=1得A=sqrt(5)/5,B=-sqrt(5)/5.则f(n)求出. B

Android布局优化

Android影响布局性能主要是Overdraw(过度绘制),表现在重叠不可见元素的重复绘制会产生额外的开销. Overdraw以颜色划分等级:蓝色:Overdraw1倍:绿色:Overdraw2倍:浅红:Overdraw3倍:暗红;Overdraw4倍以上(需要进行优化). Android布局优化解决措施: 1.合理选择控件 LinearLayout简单易用,效率高,但是使用范围有限. RelativeLayout较复杂,使用范围广,效率稍差. 2.去掉windows默认背景 去掉window

Android App性能优化(一)之布局优化

当创建复杂布局的时候,我们会在xml 文件中添加大量的ViewGroup和View.伴随着每次迭代,View树的层次越来越深,界面加载速度越来越慢,消耗的内存也越来越多.当您的程序出现加载时短暂黑屏或横竖切换时短暂黑屏,抑或如内存溢出(OOM)之类的问题时,没准您的程序需要优化了. 那么如何让程序运行速度更快?响应更敏捷?优化布局是一个最基本的方法,本文将介绍最基本的优化布局方法. 1.使用ViewStub实现View的延迟加载. 很多情况下,xml布局文件中的部分View初始状态是设置为不显示