首页
学习
活动
专区
工具
TVP
发布

Android中ViewStub控件分析及使用

的view,不甚理解, 我一直认为分析一个原生控件的最好办法就是查看源码以及demo演示,所以先看下ViewStub源码中的说明 根据源码可以获得以下信息 1,ViewStub继承自View 2,ViewStub...()方法时,ViewStub得到填充,此时viewstub所引用的layout布局会代替掉viewstub控件显示出来,也就是说在调用setVisible(int)或者inflate()方法之前,UI中只有一个大小为...0的viewstub。...在代码中进行引用 在代码中通过id获取到对ViewStub的引用,然后调用inflate方法,调用该方法后mySubTree布局会代替ViewStub。...ViewStub会被从它的parent中移除.通过inflateID:subTree可以在代码中引用到mySubTree  ViewStub stub = (ViewStub) findViewById

63070

ViewStub总结

ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View; 其特性如下: 1、调用其inflate()的时候,其布局属性android...:layout=”@layout/布局”将会替换这个ViewStub标签,这个时候我们使用findViewById将获取这个ViewStub对象为空,所以是可以被替换这一点的; 2、inflate(...)加载会返回一个View,这个View就是其layout属性对应的那个View,inflate()这个方法只能调用依次,如果再次调用会报ViewStub must have a non-null ViewGroup...viewParent这个错误,我们通过其getParent()判断是否为空,我们就可以知道是否已经加载了; 3、ViewStub的属性在inflate()后会都传给相应的布局。...4、我们ViewStub里面有一个inflateId:,这个是可以给ViewStub要加载的布局重新设置一个id,我们通过这个id可以通过使用findViewById来找到相应的布局; 5、 ViewStub

20030
您找到你想要的搜索结果了吗?
是的
没有找到

ViewStub使用

一、ViewStub是什么? 标签实质上是一个宽高都为 0 的不可见 的轻量级View。通过延迟按需加载布局的方式提升页面加载速度。...二、ViewStub使用场景 某布局默认是不可见,当满足特定场景才显示。比如网络异常提示、引导页等。 三、ViewStub怎么使用?...1、创建布局文件layout_test.xml(注:根标签可以是布局或控件,但不能为,子标签可以使用) <TextView xmlns:android="http...() //方法2 <em>viewStub</em>.visibility = View.VISIBLE 注:<em>ViewStub</em>只能被Inflate一次,inflate之后<em>ViewStub</em>对象会被置空,就不能够再通过<em>ViewStub</em>...其中方法2内部也是通过调用inflate,所有<em>ViewStub</em>的setVisibility()和inflate()都只能调用一次 (2)需要根据条件进行显隐控制(通过<em>ViewStub</em>.inflate()

72710

android 之ViewStub

推荐的做法是使用android.view.ViewStubViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。...可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub...但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。     ...首先来说说ViewStub的一些特点:          1. ViewStub只能Inflate一次,之后ViewStub对象会被置为空。...因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。

68790

ViewStub的使用

今天写一下 ViewStub ,内容很简单! ViewStub 是一个不可见的,没有尺寸,不会绘制任何东西的布局。...在 ViewStub 加载完成后就会被移除,它所占用的空间就会被新的布局替换。还是来说一下具体的用法,比较清晰。 用法 // 在布局文件中,你就当做普通 View 使用即可 <?...加载后,就会被下面这个布局占用 android:layout="@layout/activity_main"/> 加载 ViewStub 的时候可以使用方法...一旦调用上面的方法后 ViewStub 就会变成 null 了。 应用场景 页面本身有一个布局,当由于某些错误,这个布局不加载的时候,这个时候你就可以让 ViewStub 加载你预留的空白布局了。...如果提前写两套布局,根据状态使用 VISIBILBE 来调整的话,这种是你在进入这个页面,布局上面所有的控件都会加载,是会浪费资源的(有了这个空白布局一直就处于不显示状态的话)

40620

viewstub 的详细用法_pageinfo用法

推荐的做法是使用android.view.ViewStubViewStub 是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。...可以为ViewStub指定一个布局,在Inflate布局的时候,只有 ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub...但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。...并替换掉当前ViewStub本身(由此体现出了ViewStub“占位符”性质),一旦替换后,此时原来的 布局文件中就没有ViewStub控件了,因此,如果多次对ViewStub进行infalte,会出现错误信息...6.ViewStub本身是不可见的,对 ViewStub setVisibility(..)与其他控件不一样,ViewStub的setVisibility 成View.VISIBLE或INVISIBLE

3.5K40

Android布局优化三剑客:include+merge+ViewStub

1.3 控件ID相同时的处理 在1.1中我们知道了id属性可以重写include布局的根布局id,但对于根布局里面的布局和控件是无能为力的,如果这时一个布局在主布局中include了多次,那怎么区别里面的控件呢...从这里也可以看出merge的局限性,即你需要明确将merge里面的布局和控件include到什么类型的布局中,才能提前设置好merge里面的布局和控件的位置。...3.3 操作布局控件 仔细比较一下,其实ViewStub就像是一个懒惰的include,我们需要它加载时才加载。...要操作布局里面的控件也跟include一样,你可以先初始化ViewStub中的布局中再初始化控件: //1、初始化被inflate的布局后再初始化其中的控件,...id没有冲突,可以直接初始化控件使用: //2、直接初始化控件 Switch sw = findViewById(R.id.sw);

2.8K50

ViewStub你真的了解吗

目录介绍 01.什么是ViewStub 02.ViewStub构造方法 03.inflate()方法解析 04.WeakReference使用 05.ViewStub为何无大小 06.ViewStub为何不绘制...07.可以多次inflate()吗 08.ViewStub不支持merge 09.ViewStub使用场景 10.ViewStub总结分析 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点...当 ViewStub 变得可见或 inflate() 的时候,布局就会被加载(替换 ViewStub)。...ViewStub的优势在于在上面的场景中,并不一定需要把所有的内容都展示出来,可以隐藏一些View视图,待用户需要展示的时候再加载到当前的Layout中,这个时候就可以用到ViewStub这个控件了,这样可以减少资源的消耗...那么就有了之前开发使用的状态管理器开源库,就是采用了ViewStub这个控件,让View状态的切换和Activity彻底分离开。

68220

Android在layout xml中使用ViewStub完成动态加载问题

2、ViewStub类结构图 ?     从这个图里面我们可以发现ViewStub是一个控件。...是控件那就好办了,那么对其它控件可以进行的操作(例如:初始化,创建对象使用)     它都可以进行。     ...ViewStub是一个控件,所以属性都是android下的,包括layout     所以我们可以实现用一个button控制ViewStub的动态加载。   3、ViewStub属性方法 ?     ...推荐的做法是使用Android.view.ViewStubViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。...可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub

1.7K31

Android开发笔记(七十四)布局文件优化

ViewStub 在一个页面上根据不同条件展示不同的控件,我们常常会设置控件的可视属性,比如调用指定控件的setVisibility方法,若需展示则设置View.VISIBLE,若需隐藏则设置View.GONE...不过gone的控件只是看不到罢了,实际UI渲染时还是会被加载。要想事先不加载,在条件符合时才加载,就得用到标签ViewStub。...ViewStub类似一个简单的View,但具体布局由属性layout指定,并且在app加载UI时,ViewStub不显示界面内容,只有在代码中调用该控件的inflate方法,layout指定的布局才会展示...基于以上特性,ViewStub在提高布局性能上有几个特点: 优点:ViewStub在加载时只占用大约一个View控件的内存,不占用layout整个布局需要的内存; 缺点:ViewStub一旦调用inflate...: style="@style/middle_text_center" 主题Theme 主题是一种特殊的样式,主题专用于页面,而样式一般运用于控件

1.2K30

Android UI布局优化之ViewStub

ViewStub是一个继承了View类的视图。 2. ViewStub是不可见的,实际上是把宽高都设置为0 3....也就是说,在调用inflate方法之前,ViewStub一直存在于视图树中,当调用inflate之后,ViewStub被加载的视图替换,到此,ViewStub的作用完成,之后ViewStub可能被内存回收...(如果没有声明成成员变量的话,也就是没有强引用) 源码解析: 下面针对ViewStub的特性对源码进行解析: 特性一:ViewStub是一个继承了View类的视图。...public final class ViewStub extends View { 特性二:ViewStub是不可见的,实际上是把宽高都设置为0 @Override protected void...ViewStub标签的所有android:layout_打头的属性,都会替换待加载视图的跟布局对应属性 最好通过ViewStub的inflate方法加载视图,该方法会返回视图根节点。

59220

你真懂的ViewStub,include,merge么

注意事项 使用include最常见的问题就是findViewById查找不到目标控件,这个问题出现的前提是在include时设置了id,而在findViewById时却用了被include进来的布局的根元素...此时如果通过findViewById来找my_title_parent_id这个控件,然后再查找my_title_parent_id下的子控件则会抛出空指针。...将根view添加到父控件中 2.ViewStub 其实ViewStub就是一个宽高都为0的一个View,它默认是不可见的,只有通过调用setVisibility函数或者Inflate函数才会将其要装载的目标布局给加载出来...setContentView(R.layout.main); // 方式1,获取ViewStub, ViewStub listStub =...viewstub自己移除,将最终渲染的控件插入会对应的index 注意事项 判断是否已经加载过, 如果通过setVisibility来加载,那么通过判断可见性即可;如果通过inflate()来加载是不可以通过判断可见性来处理的

38620

Android绘制优化(二)布局优化

单击某一个控件,会在Tree Overview窗口中显示出对应的控件。 根据上面讲到的Hierarchy Viewer的4个四个子窗口,我们可以很容易的查看我们布局控件的层级关系。...使用ViewStub来提高加载速度 一个很常见的开发场景就是我们想要一个布局时,并不是所有的控件都需要显示出来,而是显示出一部分,对于这种情况,我们一般采用的方法就是使用View的GONE和INVISIBLE...在使用ViewStub时需要主要以下问题: ViewStub只能加载一次,加载后ViewStub对象会被置为空,这样当ViewStub引用的布局被加载后,就不能用ViewStub来控制引用的布局了。...因此,如果一个控件需要不断的显示和隐藏,还是要使用View的Visibility属性。 ViewStub不能嵌套Merge标签。...产生这一原因主要有两个原因: 在XML布局中,控件有重叠且都有设置背景。 View的OnDraw中同一区域绘制多次。

1.2K80
领券