首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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()

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

ViewStub使用

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

42520

kotlin 使用viewStub

ViewStub是一个轻量级的的View,继承于ViewGroup,没有任何尺寸,不绘制任何东西,因此绘制或者移除时更省时。...(ViewStub不可见,大小为0) 优点 实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View 缺点 ViewStub所要替代的layout文件中不能有标签 ViewStub...在加载完后会被移除,或者说是被加载进来的layout替换掉了 用法 <ViewStub android:id="@+id/stub_id" android:layout="@layout...visible/inflated,则ViewStub将从视图框架中移除,其id stub_import也会失效 ViewStub被绘制完成的layout文件取代,并且该layout文件的root view...text = "我是viewstub里的view" stub_id已经失效,如果再使用这个id,会报nullpointException; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

49520

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

25330

Android之ViewStub的简单使用

最终目的是把app加载页面的速度提高了,使用户体验更好。 2.看一个简单的demo viewstub.xml <?xml version="1.0" encoding="utf-8"?...);//获取到的textview是空的; 而使用textView = findViewById(R.id.hello_tv);就可以直接拿到控件对象了; 当实现引用布局的显示和隐藏时,测试发现使用viewstub...;按理说使用constraintLayout.setVisibility()当然也可以;根据上面的view树结构来看,好像使用引用布局的setVisibility()方法更合理一些; 下面我们再来看看viewstub...的setVisibility()为什么也可以;跟进源码看看: 源码中使用mInflatedViewRef获取到view,然后设置隐藏与显示;mInflatedViewRef是一个view的弱引用WeakReference...,使用viewstub可以实现相同的显示或隐藏效果; 从上图的最后一个红色框中可以发现,假设现在我没有调用inflate方法,而是直接点击了show按钮;然后引用布局也可以绘制出来;这就是我在写demo

58430

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

66270

viewstub 的详细用法_pageinfo用法

推荐的做法是使用android.view.ViewStubViewStub 是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。...这样,就可以使用ViewStub来方便的在运行时,要还 是不要显示某个布局。...因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。...的应用场景非常重要,正如如1中所描述需求场景下,使用ViewStub可以优化布局; 4.对ViewStub的inflate操作只能进行一次,因为inflate的 时候是将其指向的布局文件解析inflate...如果是首次使用,都会自动inflate其指向的布局文件,并替换ViewStub本身,再次使用则是相 当于对其指向的布局文件设置可见性 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

3.5K40

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基础及深入知识点...must have a non-null ViewGroup viewParent"); } } ``` Inflate使用特点 ViewStub只能被Inflate一次,inflate之后ViewStub...那么就有了之前开发使用的状态管理器开源库,就是采用了ViewStub这个控件,让View状态的切换和Activity彻底分离开。...可以说完全不影响性能…… 10.ViewStub总结分析 分析源码的原理,不管认识到哪一步,最终的目标还是在运用上,即把看源码获得的知识用到实际开发中,那么关于ViewStub使用技巧,具体可以看我的状态管理器案例

71720

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

推荐的做法是使用Android.view.ViewStubViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。...这样,就可以使用ViewStub来方便的在运行时,要还是不要显示某个布局。...ViewStub只能用来Inflate一个布局文件,而不是某个具体的View,当然也可以把View写在某个布局文件中。 基于以上的特点,那么可以考虑使用ViewStub的情况有: 1....因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。...使用的时候的注意事项: 1.

1.8K31

Android布局优化之ViewStub、include、merge使用与源码分析

例如你有五个界面,这五个界面的顶部都有布局一模一样的一个返回按钮和一个文本控件,在不使用include的情况下你在每个界面都需要重新在xml里面写同样的返回按钮和文本控件的顶部栏,这样的重复工作会相当的恶心...使用include标签,我们只需要把这个会被多次使用的顶部栏独立成一个xml文件,然后在需要使用的地方通过include标签引入即可。...-- 代码省略 --> 这样我们就可以使用my_title_layout了。...二、ViewStub 我们先看看官方的说明: ViewStub is a lightweight view with no dimension and doesn’t draw anything or...setContentView(R.layout.main); // 方式1,获取ViewStub, ViewStub listStub = (

1.1K20

Android UI布局优化之ViewStub

一种是在类被加载的时候就完成单例对象的初始化,一种是在需要使用该单例的时候才初始化。 在android的视图设计中,同样需要使用的这样的设计模式。 这样的视图加载起来需要耗费很多的时间。...在这几百个视图里面,可能有部分视图是在点击某一按钮也就是并不是马上加载, 而是延迟到要使用的时候才加载这部分视图。也就是类似于单例模式中的懒加载。 特性: 1....inflate方法会返回待加载视图的根节点 使用: 我在一个activity上放置了一个按钮,点击后加载懒加载的视图。 Activity布局文件定义my_sub_activity.xml: <?...} else { parent.addView(view, index); } // 将懒加载的视图使用弱引用进行引用...(给setVisibility方法使用,后面会讲) mInflatedViewRef = new WeakReference(view);

73620

Android实战技巧:ViewStub的应用

推荐的做法是使用android.view.ViewStubViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。...这样,就可以使用ViewStub来方便的在运行时,要还是不要显示某个布局。...基于以上的特点,那么可以考虑使用ViewStub的情况有: 1. 在程序的运行期间,某个布局在Inflate后,就不会有变化,除非重新启动。...因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。...这时就只能使用View的可见性来控制了。 2. 想要控制显示与隐藏的是一个布局文件,而非某个View。

22920
领券