ViewStub的实战开发
来源:互联网 发布:怎么查看淘宝违规商品 编辑:程序博客网 时间:2024/05/05 10:24
一.常见的布局分析
在开发的时候,有些布局是要根据条件而动态显示,达到一个布局两用的效果,运用View.VISIBLE和View.GONE去改变布局的可见性,
这样的做法显然是没什么多大的问题,优点逻辑清晰,控制灵活,但缺点就是耗费资源,在setContentView()或者用inflate加载布局文件时
,无论View是否被设置为View.GONE(隐藏)和View.VISIBLE(可见),都会创建对象,占用一点程度上的内存,所以在考虑优化程序的时候,
尽量避免资源浪费,降低程序的资源占有量,提高响应速度,提升软件的用户体验。
二.ViewStub的介绍
1.其实Google在android1.0发布的时候,就提供了android.view.ViewStub类,继承于android.view.View,
是一个轻量级的View,不占用布局的位置(相对于View设置了View.GONE效果),占用资源小,性能尤佳等特点;
2.使用ViewStub两个属性:
1)android:inflatedId :重新定义引用布局文件根元素Id,运用inflateId要注意两点:
a.可以不用设置;
b.在ViewStub设置inflatedId,无论引用布局文件的根元素Id是否设置,都将被inflateId所代替,
那么布局文件本身的Id会重置,即没有了,如果被实例化使用,将会报空指针异常:
java.lang.NullPointerException;
2)android:layout:引用布局文件,需独立的layout文件,类似include的layout属性,这个属性必须要设置否则报错:
java.lang.IllegalArgumentException: ViewStub must have a valid layoutResource
3.ViewStub的使用
ViewStub有个特点,它只能被inflate一次,之后会被置空,如果再次使用inflate时,则会报空指针异常,
所以ViewStub也不是万能的,如果是经常要来回切换ViewStub的显示和隐藏,ViewStub就不适用,但有个办法
可以控制引用布局里的View的可见性,在一定程度上,可以控制可见性;
三.开发实战
1.MainActivity.java
1 /** 2 * @ClassName MainActivity 3 * @Description TODO 布局文件有两个ViewStub,在程序onCreate时,用奇偶来决定显示那一个ViewStub 4 * 布局-------1 和 布局-------2 5 * @author kenny 6 * @date 2012-8-18 7 */ 8 public class MainActivity extends Activity { 9 10 @Override11 public void onCreate(Bundle savedInstanceState) {12 super.onCreate(savedInstanceState);13 setContentView(R.layout.activity_main);14 15 ViewStub viewStub;16 if (((int) (Math.random() * 100)) % 2 == 0) {17 viewStub = (ViewStub) findViewById(R.id.viewstub_demo_text);18 viewStub.setVisibility(View.VISIBLE);19 20 /** 用inflate()和setVisibility()效果一样 */21 //viewStub.inflate();22 } else {23 viewStub = (ViewStub) findViewById(R.id.viewstub_demo_image);24 viewStub.setVisibility(View.VISIBLE);25 }26 }27 }
2.activity_main.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:gravity="center_horizontal" 6 android:orientation="vertical" > 7 8 <ViewStub 9 android:id="@+id/viewstub_demo_text"10 android:layout_width="wrap_content"11 android:layout_height="wrap_content"12 android:layout_marginLeft="5dip"13 android:layout_marginRight="5dip"14 android:layout_marginTop="10dip"15 android:layout="@layout/viewstub_demo_textview01" />16 17 <ViewStub18 android:id="@+id/viewstub_demo_image"19 android:layout_width="wrap_content"20 android:layout_height="wrap_content"21 android:layout_marginLeft="5dip"22 android:layout_marginRight="5dip"23 android:layout="@layout/viewstub_demo_textview02" />24 </LinearLayout>
3.viewstub_demo_textview01.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:orientation="vertical" > 6 7 <TextView 8 android:id="@+id/textview01" 9 android:layout_width="fill_parent"10 android:layout_height="wrap_content"11 android:background="#aa664411"12 android:textSize="16sp"13 android:text="布局-------1"14 />15 16 </LinearLayout>
4.viewstub_demo_textview02.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:orientation="vertical" > 6 7 <TextView 8 android:id="@+id/textview02" 9 android:layout_width="fill_parent"10 android:layout_height="wrap_content"11 android:background="#aa664411"12 android:textSize="16sp"13 android:text="布局-------2"14 />15 16 </LinearLayout>
源码下载:/Files/hpboy/ViewStub01.zip
转载请注明出处:http://www.cnblogs.com/hpboy
- ViewStub的实战开发
- ViewStub的实战开发
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Android实战技巧:ViewStub的应用
- Oracle 11g R2 for Win7旗舰版(64位)的安装步骤
- svn的auth配置文件介绍
- [c#]BPlusTreePrototype - B+树的C#实现
- 某喜欢研究车的80后,驾驶经验59条
- 浅谈Linux服务器究竟设置多大交换分区合适
- ViewStub的实战开发
- json使用注意事项整理
- eclipse+webservice开发实例
- 人生最大的不幸,就是看不见自己拥有的幸福
- 仿android4.0 Spinner下拉效果
- 如何在MySQL中的获取IP地址的网段
- 关联关系中的CRUD_Cascade_Fetch
- Apache Prefork、Worker和Event三种MPM分析
- Cocos2d-x初入学堂15篇