Android布局总结二:ViewStub总结
来源:互联网 发布:现在开淘宝店好做吗 编辑:程序博客网 时间:2024/06/05 10:38
简介
ViewStub
是一个轻量级的的View,继承于ViewGroup,没有任何尺寸,不绘制任何东西,因此绘制或者移除时更省时。(ViewStub不可见,大小为0)
优点
实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View
缺点
- ViewStub所要替代的layout文件中不能有标签
- ViewStub在加载完后会被移除,或者说是被加载进来的layout替换掉了
用法
<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" />
用ViewStub加载layout文件时,可以调用 setVisibility(View.VISIBLE)
或者inflate()
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // or View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
注意
- 一旦ViewStub visible/inflated,则ViewStub将从视图框架中移除,其id
stub_import
也会失效 - ViewStub被绘制完成的layout文件取代,并且该layout文件的root view的id是
android:inflatedId
指定的idpanel_import
,root view的布局和ViewStub视图的布局保持一致
实例
<!-- layout_viewstub.xml 要延迟加载的view --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/layout_viewstub_old" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@android:color/darker_gray" android:padding="5dp" android:text="This is the layout instead of ViewStub view."/> </LinearLayout>
<!-- main.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> <TextView android:id="@+id/act_test_viewstub_tv_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@android:color/darker_gray" android:padding="5dp" android:text="Show ViewStub"/> <ViewStub android:id="@+id/act_test_viewstub_viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inflatedId="@+id/act_layout_viewstub_new" android:layout="@layout/layout_viewstub"/> </LinearLayout>
public class ViewStubTestActivity extends FragmentActivity { private static final String TAG = "test_viewstub"; protected ViewStub mViewStub; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_test_viewstub); mViewStub = (ViewStub) findViewById(R.id.act_test_viewstub_viewstub); Log.e(TAG, "viewstub: " + findViewById(R.id.act_test_viewstub_viewstub)); Log.e(TAG, "layout: " + findViewById(R.id.act_layout_viewstub_new)); findViewById(R.id.act_test_viewstub_tv_show).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View layoutView; // mViewStub.setVisibility(View.VISIBLE); layoutView = mViewStub.inflate(); Log.e(TAG, "mViewStub: " + mViewStub); // ViewStub在visible/inflated后会被移除,所以此处为null Log.e(TAG, "viewstub: " + findViewById(R.id.act_test_viewstub_viewstub)); // layoutView = findViewById(R.id.act_layout_viewstub_new); Log.e(TAG, "layoutView equals finviewbyid(layout): " + layoutView.equals(findViewById(R.id.act_layout_viewstub_new))); Log.e(TAG, "layout: " + layoutView); if (layoutView != null) { // / layoutView的root view id 是mViewStub inflatedId指定的ID if (layoutView.getId() == R.id.act_layout_viewstub_new) { Log.e(TAG, "layout root id is act_layout_viewstub_new"); } else if (layoutView.getId() == R.id.layout_viewstub_old) { Log.e(TAG, "layout root id is layout_viewstub_old"); } else { Log.e(TAG, "layout root id is anyone : " + layoutView.getId()); } // layoutView的root view布局 和mViewStub的布局保持一致 int width = layoutView.getLayoutParams().width; if (width == ViewGroup.LayoutParams.MATCH_PARENT) { Log.e(TAG, "layout width is MATCH_PARENT"); } else if (width == ViewGroup.LayoutParams.WRAP_CONTENT) { Log.e(TAG, "layout width is WRAP_CONTENT"); } else { Log.e(TAG, "layout width is anyone : " + width); } } } }); } }
阅读全文
0 0
- Android布局总结二:ViewStub总结
- ViewStub总结
- android开发布局优化—include、merge、viewstub源码分析总结
- android布局技巧 ViewStub
- Android的布局ViewStub
- Android布局之ViewStub
- android ViewStub--布局优化
- xml布局内容总结(二)--Android
- Merge、ViewStub标签总结
- Android ViewStub 布局延迟加载
- Android:布局include、merge 、ViewStub
- Android布局优化之ViewStub
- Android 布局优化-ViewStub 视图
- Android include和merge标签、ViewStub控件的使用总结
- Android include和merge标签、ViewStub控件的使用总结
- android布局--总结
- android布局总结
- Android布局总结
- Elasticsearch系列(四)----Elasticsearch索引文档的增删改查
- Leetcode 44:Wildcard Matching
- 【IDEA】IDEA新建maven的web项目有pom.xml无Index.jsp
- ZooKeeper学习笔记:使用zookeeper的API实现增删查改以及客户端的观察者模式
- 算法讲解:二分图匹配
- Android布局总结二:ViewStub总结
- FreeMaker
- Gym
- #17
- select单表查询语句(二)
- JavaScript匹配邮箱
- python入门课程 第一章 课程介绍
- linux学习记录--UNIX发展史和发行版本
- ZOJ 1129 Erdos Numbers(bfs)