2011.09.22——— android ViewStub的简单使用
参考:
http://www.cnblogs.com/xirihanlin/archive/2010/04/28/1723291.html
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=100417&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline
ViewStub组件和<include>标签的作用类似,主要是为了提高布局的重用性,及布局的模块化。它们之间最大的差别是,ViewStub中的布局不会随着它所在布局的渲染而渲染,而<include>标签中的布局会随着它所在布局的渲染而渲染,ViewStub中的布局只有在你需要的时候才会渲染到主界面中。
1、xml
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="显示"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="btn2"
/>
<ViewStub
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/vs"
android:layout="@layout/viewstub"
/>
</LinearLayout>
viewstub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn3"
android:text="other btn"
/>
</LinearLayout>
2、MainActivity.java
package com.lp.viewStub;
import android.app.Activity;
import android.opengl.Visibility;
import android.os.Bundle;
import android.view.View;
import android.view.ViewStub;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button btn;
private Button btn2;
private ViewStub vs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vs = (ViewStub)findViewById(R.id.vs);
btn = (Button)findViewById(R.id.btn);
btn2 = (Button)findViewById(R.id.btn2);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//vs.inflate();//多次点击出错
vs.setVisibility(View.VISIBLE);
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
vs.setVisibility(View.GONE);
}
});
}
}
这样既可以用了
另外 我在写的时候 的几个问题
1、多次调用inflate()错误
当你掉 mViewStub.inflate()的时候 已经用你viewStub里面指定的layout替代了ViewStub ,换句话说 ViewStub已经不在main.xml里面 在inflate()源码里面 会判断
final ViewParent viewParent = getParent();
if (viewParent != null && viewParent instanceof ViewGroup) {
这时候 getParent()就是null了 所以你再一次点击 就会报错了
2、调用vs.setVisibility(View.VISIBLE);可以多次点击
在源码当中
super.setVisibility(visibility);
inflate();
先不显示 然后才调用Inflate() 所以ViewStub可能还在main.xml里面吧 所以getParent不会报错
分享到:
相关推荐
Android下使用ViewStub控件动态懒加载。可以参见博客:http://www.cnblogs.com/plokmju/p/android_ViewStub.html
第三章 Android开发 使用ViewStub延迟展开视图.docx
Android2.2 r1 API 中文文档,注意这里只有ViewStub的,请关注http://over140.cnblogs.com/的更新。期待大家一起参与!
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...
Android UI优化之merge标签的使用,主要介绍ViewStub方法使用的注意事项及方法实现。
Android 使用ViewStub 实现Activity 页面不同状态动态切换。可以直接继承使用,也可以根据自己的需求进行优化。。
DataBinding中ViewStub例子
这是一个关于Android Layout布局复用的简单示例。
Android开发:巧妙运用ViewStub写出类似Tab选项卡。
利用ViewStub显示和隐藏布局 运用View.VISIBLE和View.GONE去改变布局的可见性.
android 用ViewStub实现Tab选项卡效果
android viewstub功能的简单代码事例
Android——Android lint工具项目资源清理 最近维护的项目已经有两年多,经过很多前辈的迭代,项目并没有变得健壮,而变得很臃肿.用Android lint工具清理了一次,清楚了不少废弃的布局和资源. 1. Android lint工具 可以...
在布局优化中,Androi的官方提到了这三种布局、、<ViewStub>,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记。 1、布局重用 标签能够重用布局文件,简单的使用...
本文档福利发放... 里面是android代码,实现的是动态添加控件和viewstub使用的例子。东西比较简单,仅适合初学者。
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能... 推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把...推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的
在Android开发中,View是我们必须要接触的用来展示的技术.通常情况下随着View视图的越来越复杂,整体布局的性能也会随之下降.这里介绍一个在某些场景下提升布局性能的View,它就是ViewStub. ViewStub是什么 ViewStub是...
主要为大家详细介绍了Android布局技巧之使用ViewStub,具有一定的实用性,感兴趣的小伙伴们可以参考一下
初次学习使用viewStub,做个简单viewstub小例子。