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

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

38330

ViewStub使用

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

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

    android 之ViewStub

    那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。...虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。      ...可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub...想要控制显示与隐藏的是一个布局文件,而非某个View。               因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。     ...所以,如果想要控制某个View(如Button或TextView)的显示与隐藏,或者想要在运行时不断的显示与隐藏某个布局或View,只能使用View的可见性来控制。

    96490

    ViewStub延迟加载

    在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码中通过控制...但是它的缺点就是,耗费资源,虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。...使用时可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时或调用了ViewStub.inflate()的时候,ViewStub...4.3中所讲到的ViewStub指向的布局文件解析inflate并替换掉当前ViewStub本身,并不是完全意义上的替换(与include标签不太一样),替换时,布局文件的layout params是以..., Toast.LENGTH_SHORT).show(); } }); } else { mViewStub.setVisibility(View.GONE

    2.2K10

    Android实战技巧:ViewStub的应用

    那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。...虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。...可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub...想要控制显示与隐藏的是一个布局文件,而非某个View。 因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。...所以,如果想要控制某个View(如Button或TextView)的显示与隐藏,或者想要在运行时不断的显示与隐藏某个布局或View,只能使用View的可见性来控制。

    44520

    viewstub 的详细用法_pageinfo用法

    那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。...虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。...想要控制显示与隐藏的是一个布局文件,而非某个View。 因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。...所以,如果想要控制某个View(如Button或TextView)的显示与隐藏,或者想要在运行时不断的显示与隐藏某个布局或View,只能使用View的可见性来控制。...5.3中所讲到的ViewStub指向的布局文件解析inflate并替换掉当前 ViewStub本身,并不是完全意义上的替换(与include标签还不太一样),替换时,布局文件的layout params

    4.3K40

    ViewStub和Gone区别

    虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。...可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候, 或是调用了ViewStub.inflate()的时候,ViewStub...但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。...(1.)android.view.ViewStub特点: 1.ViewStub只能Inflate一次,之后ViewStub对象会被置为空。...2.想要控制显示与隐藏的是一个布局文件,而非某个View。 因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。

    39430

    ViewStub的使用

    今天写一下 ViewStub ,内容很简单! ViewStub 是一个不可见的,没有尺寸,不会绘制任何东西的布局。...在 ViewStub 加载完成后就会被移除,它所占用的空间就会被新的布局替换。还是来说一下具体的用法,比较清晰。 用法 // 在布局文件中,你就当做普通 View 使用即可 <?...android:layout_width="match_parent" android:layout_height="300dp" // 当 ViewStub...加载后,就会被下面这个布局占用 android:layout="@layout/activity_main"/> 加载 ViewStub 的时候可以使用方法...一旦调用上面的方法后 ViewStub 就会变成 null 了。 应用场景 页面本身有一个布局,当由于某些错误,这个布局不加载的时候,这个时候你就可以让 ViewStub 加载你预留的空白布局了。

    55720

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

    ViewStub 在一个页面上根据不同条件展示不同的控件,我们常常会设置控件的可视属性,比如调用指定控件的setVisibility方法,若需展示则设置View.VISIBLE,若需隐藏则设置View.GONE...ViewStub类似一个简单的View,但具体布局由属性layout指定,并且在app加载UI时,ViewStub不显示界面内容,只有在代码中调用该控件的inflate方法,layout指定的布局才会展示...基于以上特性,ViewStub在提高布局性能上有几个特点: 优点:ViewStub在加载时只占用大约一个View控件的内存,不占用layout整个布局需要的内存; 缺点:ViewStub一旦调用inflate...下面是个布局中添加主题的例子: android:theme="@android:style/Theme.Dialog" 除了系统自带的主题样式,我们也可以在themes.xml中自定义主题,具体步骤与自定义样式类似...从截图可以看到,windowFrame的覆盖区域包括窗口与边框,且窗口对内半透明、对外不透明,而边框对外半透明。

    1.5K30

    Android UI布局优化之ViewStub

    ViewStub是一个继承了View类的视图。 2. ViewStub是不可见的,实际上是把宽高都设置为0 3....也就是说,在调用inflate方法之前,ViewStub一直存在于视图树中,当调用inflate之后,ViewStub被加载的视图替换,到此,ViewStub的作用完成,之后ViewStub可能被内存回收...(如果没有声明成成员变量的话,也就是没有强引用) 源码解析: 下面针对ViewStub的特性对源码进行解析: 特性一:ViewStub是一个继承了View类的视图。...ViewStub标签的所有android:layout_打头的属性,都会替换待加载视图的跟布局对应属性 最好通过ViewStub的inflate方法加载视图,该方法会返回视图根节点。...findViewById查找待加载视图中的节点,需要在inflate方法执行之后,否则会找不到 关于UI布局的优化,还有include和merge两种方式,大家可以参阅:Android 布局优化之include与merge

    1.6K20
    领券