ViewStub惰性装载控件

   一、之前我们介绍过<include>标签,该标签可以再布局文件中引用另外一个布局文件,这种方式是在布局文件中固定导入,使用起来不是很方便。
ViewtSub的功能和<include>的功能类似,也是实现引用另外一个布局。但是唯一不同的是ViewStub并不会马上装载引用布局文件,只有在调用了ViewStub.inflate或ViewStub.setVisibility(View.VISIBILE)方法ViewStub才会装载引用的控件。

  二、下面我们来一个实列讲解viewstub:

  在main.xml文件中:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     <!-- 静态加载布局文件 -->
 7     <include
 8         android:id="@+id/include1"
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         layout="@layout/next" />
12     <!-- 动态加载布局文件 -->
13         <ViewStub
14             android:id="@+id/viewstub"
15             android:layout_width="fill_parent"
16             android:layout_height="wrap_content"
17             android:layout="@layout/next" />
18     <LinearLayout
19         android:layout_width="fill_parent"
20         android:layout_height="wrap_content"
21         android:layout_marginEnd="1dp"
22         android:orientation="horizontal" >
23         <Button
24         android:id="@+id/button1"
25         android:layout_width="0dp"
26         android:layout_height="wrap_content"
27         android:layout_weight="1"
28         android:text="加载" />
29         <Button
30             android:id="@+id/button2"
31             android:layout_width="0dp"
32             android:layout_height="wrap_content"
33             android:layout_weight="1"
34             android:text="隐藏" />
35     </LinearLayout>
36 </LinearLayout>

在next.xml文件中:

1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="match_parent"
4     android:layout_height="match_parent" >
5     <RatingBar
6         android:id="@+id/ratingBar1"
7         android:layout_width="wrap_content"
8         android:layout_height="wrap_content" />
9 </RelativeLayout>

在.java文件中:

 1 private ViewStub stub;
 2     private Button button1,button2;
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.main);
 7         stub = (ViewStub) findViewById(R.id.viewstub);
 8         button1 = (Button) findViewById(R.id.button1);
 9         button2 = (Button) findViewById(R.id.button2);
10         button1.setOnClickListener(new OnClickListener() {
11
12             @Override
13             public void onClick(View v) {
14                 // TODO 自动生成的方法存根
15                 View view = stub.inflate();   //inflate()是通过ViewStub对象将next.xml加载到viewStub容器中,仅infalte这句语句就可以实现惰性装载控件
16                 RelativeLayout layout = (RelativeLayout) view;  //view 返回值是next.xml文件的View对象,通过强制转换得到next.xml文件中的布局对象,通过布局对象可以获得子控件Ratingbar
17
18             RatingBar bar = (RatingBar) layout.findViewById(R.id.ratingBar1);
19             bar.setNumStars(3);
20             Toast.makeText(MainActivity.this, "layout.getId();" + view.getId(), Toast.LENGTH_LONG).show();
21             }
22         });
23
24         button2.setOnClickListener(new OnClickListener() {
25
26             @Override
27             public void onClick(View v) {
28                 // TODO 自动生成的方法存根
29                 stub.setVisibility(stub.GONE);//隐藏布局
30             }
31         });
32
33         stub.setOnInflateListener(new OnInflateListener() {
34
35             @Override
36             public void onInflate(ViewStub stub1, View inflated) {
37                 // TODO 自动生成的方法存根
38                 Toast.makeText(MainActivity.this, "getLayoutResource" + stub.getLayoutResource(), Toast.LENGTH_LONG).show();//getresource                                          //的值就是next.xml(R.layout.next)的Id值
 
39  } 40  }); 41 }运行结果:

注意::viewstub不能反复inflate,只能inflate一次注意:
时间: 2024-10-31 00:25:05

ViewStub惰性装载控件的相关文章

轻量级的惰性控件——ViewStub

在开发过程中,有时候,需要这样一种控件,正常情况下不可见,不占用任何布局空间,只在某种特定情况下显示,这种情况下,我们使用一个普通的View,利用设置setVisibility(View.GONE)自然也可以实现,但是这样的话即使我们不需要显示View,Android也会将这个View渲染出来,只不过不显示而已.如果我们不仅仅需要一个控件,而是一个layout呢?那么是不是Android将做更多的无用功呢?而ViewStub很好的避免了这个问题,默认情况下ViewStub是不显示的,不占用父控件

布局与控件(五)-Toast吐司与布局的抽象标签merge include ViewStub

第5节 Toast 5.1 使用效果 Toast用来向用户弹出一个提示框,然后自动消失,就像这样, 面包机烤好面包后,就腾的一下把面包从面包机里弹出来.而这个控件显示时也像是从面包机里弹出来的,所以取了这个名字-Toast(吐司). 使用Toast显示消息的时候,即使启动它的Activity并没有显示在屏幕上,Toast提示的消息也会被显示到最前面,让用户看到.例如, Activity A正通过网络下载一个文件, 此时用户点击Home回到主界面,又启动了另一个应用的Activity B:现在Ac

[转] 基于C#的波形显示控件的实现

转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学C# WinForm边设计,这个波形显示控件就是项目中的一部分,也花了自己绝大多数时间.此外,顺便将该波形显示控件当作自己毕业设计的内容,下文实际上是节选自自己的本科毕业论文,希望对大家能有所帮助.代码以及文章有疏漏.错误.不妥之处在所难免,欢迎

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

原文:利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer 注:ArcGIS样

收集Github上的iOS控件和开发资料

文章来源:http://www.mobile-open.com/2015/85017.html 动画 awesome-ios-animation 收集了iOS平台下比较主流炫酷的几款动画框架 RCTRefreshControl qq的下拉刷新 TBIconTransitionKit icon 的点击动画过渡效果 PullToBounce 类似百度外卖的下拉刷新动画 LiquidFloatingActionButton 可定制水滴型浮动动态按钮组件及演示 富文本 DDRichText 附带了微信朋

WPF 控件与布局

[控件到底是什么?] 程序的本质就是"数据+算法"------用户输入原始的数据,算法处理原始数据并得到结果数据.问题就在于程序如何将结果数据显示给用户.同样一组数据,你可以使用LED阵列显示出来,或者以命令行模式借助各种格式控制符(如TAB)对齐并输出,但这些都不如图形界面(GUI  Graphic User Interface)来的友好和方便.GUI的方便在于它对数据展示的直观性,程序员可以通过编程的方式将数据通过图形的方式展示出来,从而避免了用户面对一大堆复杂数据的痛苦.提高了工

[iOS基础控件 - 6.9] 聊天界面Demo

A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话框 4.隐藏相同的发送时间 5.底部功能按钮:语音按钮.消息输入框.表情按钮.附加按钮 6.响应键盘事件,呼出键盘.隐藏键盘时对上述的视图作出上移操作 7.键盘的发送事件处理 B.实现点 1.底层视图搭建 上部分聊天信息框:UITableView 下部分功能区:UIButton 信息输入框使用无边框

win32创建控件的一些问题

在我们使用CreateWindow();像一般控件建Windows扩展控件的时候我们会发现控件没有创建成功 这是因为我们没有对Windows扩展控件库进行初始化,这要我们使用InitCommonControlsEx();函数来对 Windows扩展控件库进行初始化,代码如下: INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);InitCtrls.dwICC = ICC_PAGESCROL

[Android Pro] android控件ListView顶部或者底部也显示分割线

reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在顶部是不显示分割线的,但是我们可以使用一些技巧来显示.我们先来看下默认情况下ListView显示的效果: 可以看到顶部是没有分割线的,但是有时候我们的美工硬是在上面画了一条分割线,没办法,我们也得加上,我们在ListView顶部加上一个Header就可以实现,代码如下 listView.addHea