ViewStub的简单用法和说明
最近无意间知道了ViewStub,所以特地的去了解了一下
都知道ViewStub是一个不可见的,大小为0的View,实际上跟include差不多,但是ViewStub要更加节约资源。被称为是“懒惰的include”,因为ViewStub只会在你需要用到的时候加载,下面就看一下用法
这里有两个布局,这个是主布局activity_main.xml
<RelativeLayout 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"
tools:context="com.ehsure.lesson_one.MainActivity">
<ViewStub
android:id="@+id/main_vs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/item_one"
/>
</RelativeLayout>
这个是子布局item_one.xml
<LinearLayout 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/item_one_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/str_one"
/> <Button
android:id="@+id/item_one_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_one"
android:onClick="show"
/> </LinearLayout>
这个是 Activity里面的代码:
public class MainActivity extends Activity {
private ViewStub viewStub;
private View view; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//显示ViewStub的内容
viewStub = (ViewStub) findViewById(R.id.main_vs);
view = viewStub.inflate();
// viewStub.setVisibility(View.VISIBLE); //对ViewStub包含布局的控件进行操作
TextView textView = (TextView)view.findViewById(R.id.item_one_tv);
textView.setText("hahahaha");
//你也可以通过延迟来显示或者更改你的ViewStub包含布局的内容
new Timer().schedule(new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(1);
}
},2000);
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
TextView textView = (TextView)view.findViewById(R.id.item_one_tv);
textView.setText("哈哈哈");
Button button = (Button)view.findViewById(R.id.item_one_btn);
button.setText("DIANJI");
}
}
};
}
其中让ViewStub可见有两种方法: 第一是通过setVisibility,第二种就是通过inflate()方法,但是这两句代码不能共存,因为inflate方法只能调用一次,而setVisibility实际上会间接调用inflate.
其次ViewStub有一个限制就是不能使用merge标签,说到这里我顺便说一下merge标签
merge最常见的用处就是替换掉FrameLayout布局,官方的说法是这样可以减少一级布局层次,达到布局优化的效果
ViewStub的简单用法和说明的更多相关文章
- ViewStub的简单解析和使用场景
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- servlet简单用法和配置示例及说明
学习原因和目的: 我如今所接触的项目都是bs模式的web应用,而里边基本上都是用的spring MVC和前台交互,servlet貌似用的很少. 但是即便是用spring和spring MVC, ...
- WordPress 插件机制的简单用法和原理(Hook 钩子)
WordPress 的插件机制实际上只的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒的东西,下面我们来详细了解一下它. PS:本文只是简单的总结 ...
- Visual C++ 6.0中if..else..的简单用法和基本格式
# include <stdio.h> int main (void) { float score; printf("请输入您的考试成绩:"); scanf(" ...
- UIImage的简单用法和实际操作
png,pdf不需要添加后缀名 jpg添加后缀名 存储 UIImagejpg contentMode属性 这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定: UIVi ...
- UILabel的简单用法和实际操作
1.UILabel **//设置文字 label.text = @"欢迎收看灌篮高手,我是安溪教练";**//设置文字颜色label.textColor = [UIColor ...
- nodejs-websocket 的简单用法和安装
网上很多的websocket我都看不懂,看了个视频才慢慢懂了点 视频链接:https://blog.csdn.net/QQ408896436/article/details/81606553 以下都是 ...
- echo命令的简单用法和实例
在CentOS 6.8版本下,通过实例的形式,展现选项和参数的灵活运用,可以简明的了解echo的用法. 一.语法:echo [SHORT-OPTION]… [STRING]… :echo [选项]…[ ...
- [python]print简单用法和读取用户输入
代码开发环境:Eclipse 1.打印字符串: print "Hello world!" myString = "Hello world!" print myS ...
随机推荐
- 动态加载JS脚本
建立dynamic.js文件,表示动态加载的js文件,里面的内容为: function dynamicJS() { alert("加载完毕"); } 如下方法中的html页面和dy ...
- glibc与MSVC CRT(转载)
glibc与MSVC CRT 运行库是平台相关的,因为它与操作系统结合得非常紧密.C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数 ...
- hibernate 连接oracle数据库的配置 (参考)
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC &qu ...
- Nginx+Tomcat构建动、静分离WEB架构
一.简介 二.环境介绍 三.后端服务器安装配置 四.安装论坛 五.安装配置前端Nginx服务器 六.验证服务 一.Tomcat简介 Tomcat是Apache 软件基金会(Apache Softwar ...
- JavaScript封装
js封装就是把使用方式简单化,内部逻辑和使用解耦.使用人员知道参数和返回值就可以了,其他不用使用人员设置. 封装就是将属性,方法,字段等封装成类. JavaScript封装方法 1,函数方式 func ...
- TestNG插件的安装问题
一.可以采用离线安装的方式 离线安装若不成功,可以删除之前的eclipse,然后在新下载eclipse中添加离线安装包 1.离线安装方法: 发现很多同学和我一样无法在线安装testNg,现在分享一个离 ...
- xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368)
1.错误发生场景:使用2.4.1版本的xtrabackup工具进行全备,备份日志中报出此错误2.知识要点:MySQL中,redo 日志写进程会在三种条件下被触发从log buffer中写日志到redo ...
- IIS下注册COM组件(转)
以Excel为例 问题描述: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005基 ...
- Spark External Datasets
Spark能够从任何支持Hadoop的存储源来创建RDD,包括本地的文件系统,HDFS,Cassandra,Hbase,Amazon S3等.Spark支持textFile.SequenceFiles ...
- 搭建测试环境——针对S3C6410开发板
(一)前言 目前市面上的开发板型号和种类很多,但目前最流行的是基于三星S3C6410 ARM11架构的开发板.国内很多厂商在S3C6410 ARM11架构的开发板的基础上进行了扩展,开发了扩展板,本博 ...