测试8.5

xiaoxiao2021-02-28  114

介绍 -- 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); // 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指定的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);                     }                 }             }         });     } } ``` ![这里写图片描述](https://img-blog.csdn.net/20170801201410503?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzU5MDAwNDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
转载请注明原文地址: https://www.6miu.com/read-30351.html

最新回复(0)