文章标题
来源:互联网 发布:商艺设计淘宝 编辑:程序博客网 时间:2024/06/05 03:10
介绍
ViewStub 是一个轻量级的View,没有尺寸,不绘制任何东西,因此绘制或者移除时更省时。(ViewStub不可见,大小为0)
优点
实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View
缺点
ViewStub所要替代的layout文件中不能有<merge>
标签
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);// orView importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
注意
- 一旦ViewStub visible/inflated,则ViewStub将从视图框架中移除,其id stub_import 也会失效
- ViewStub被绘制完成的layout文件取代,并且该layout文件的root view的id是android:inflatedId指定的id panel_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>
<!-- act_test_viewstub.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"/> <!--<include--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--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); } } } }); }}
阅读全文
6 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- JVM &JMM && 类加载
- laravel的原生子查询,用来统计3张表的相关数据
- bootstrap系列之十按钮组的使用
- Constructing Roads 【poj-2421】【最小生成树】
- 深度遍历数组
- 文章标题
- 用OpenCV的resize函数实现图像的缩放
- 理解React的组件
- JavaScript 输出
- java 集合之基于ArrayList的洗牌比大小游戏
- Subline text3 格式化快捷鍵設置方法
- Hive 调优总结
- 8.5
- ios 后台多文件下载