ViewStub用法
来源:互联网 发布:java字符串转换整形 编辑:程序博客网 时间:2024/06/11 16:05
介绍
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="match_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
<!-- 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
<!-- 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>
MainActivity
public class MainActivity extends AppCompatActivity { private static final String TAG = "test_viewstub"; protected ViewStub mViewStub; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_test_viewstub); mViewStub = (ViewStub) findViewById(R.id.act_test_viewstub_viewstub); findViewById(R.id.act_test_viewstub_tv_show).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { View layoutView; 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); } } } }); }}
作者:蚊子Skeeter
链接:http://www.jianshu.com/p/5f64bacbd759
來源:简书
阅读全文
0 0
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法
- ViewStub用法介绍
- Android ViewStub的用法
- Android ViewStub的用法
- viewstub用法(android)
- ViewStub基本用法
- ViewStub 用法详解
- ViewStub基本用法(延迟初始化)
- Android之viewstub用法详解
- 《Python编程:从入门到实践》2-9章 笔记
- About the application of lambda and relayCommand
- Android 6.0 ProgressBar 自定义动画不显示问题
- ubuntu16.04+cuda8.0+cudnn5.1+caffe 安装(基于独立主机&集成显卡>X1080Ti)
- angular中ng-mouseenter、ng-mouseleave的时间差导致dom闪屏问题(timeout可缓解)
- ViewStub用法
- SSM(十一) 基于dubbo的分布式架构
- java中Calendar.DAY_OF_WEEK需要减一的原因
- vue2的全局变量的设置
- UidGenerator:百度出品的基于 Snowflake 算法的唯一 ID 生成器
- 如何复制shape,以及如何将shape调整到其他层
- 嵌入式系统开发入门一:必备基础知识
- delphi application的对话框为什么跑到主窗口后面 ?
- 函数调用(一)