Android UI优化之ViewStub标签的使用
2016-04-24 01:24
519 查看
在前面两篇文章已经介绍了<include />与<merge />标签的使用。
<include />:/article/7640250.html
<merge />:/article/7640251.html
本文将主要介绍<ViewStub />标用。
1、<ViewStub />标签最大的特点就是当你需要的时候才会加载,但并不会影响UI初始化的性能。各种不常用的布局文件如进度条、显示错误信息等可以使用<ViewStub />标签以减少内存使用量,加快渲染速度。<ViewStub />标签是一个不可见的,大小为0的View。
2、实现View的延迟加载,避免浪费资源,在你需要的时候实行加载。
3、与View.GONE的区别
<ViewStub />只能inflate一次,用完以后<ViewStub />就会置为空,后期不能再次使用,重新开启应用或者杀死进程可再次使用。类似显示隐藏按钮这种功能是不能实现的。
View.GONE 费资源,虽然已经GONE掉,但显示View时还是会加载。
分析完后,实现代码如下:
activity_main.xml
通过Button事件控制<ViewStub />的重现。
view.xml
通过<ViewStub />加载进度条,上面主要是实现进度条的加载。
MainActivity.java
主要是通过两个Button事件控制<ViewStub />的复现与隐藏。
运行效果图
运行及点击GONE页面 点击show显示ViewStub事件
源码下载地址:http://download.csdn.net/detail/u012721519/9500622
Good luck!
Write by Jimmy.li
<include />:/article/7640250.html
<merge />:/article/7640251.html
本文将主要介绍<ViewStub />标用。
1、<ViewStub />标签最大的特点就是当你需要的时候才会加载,但并不会影响UI初始化的性能。各种不常用的布局文件如进度条、显示错误信息等可以使用<ViewStub />标签以减少内存使用量,加快渲染速度。<ViewStub />标签是一个不可见的,大小为0的View。
2、实现View的延迟加载,避免浪费资源,在你需要的时候实行加载。
3、与View.GONE的区别
<ViewStub />只能inflate一次,用完以后<ViewStub />就会置为空,后期不能再次使用,重新开启应用或者杀死进程可再次使用。类似显示隐藏按钮这种功能是不能实现的。
View.GONE 费资源,虽然已经GONE掉,但显示View时还是会加载。
分析完后,实现代码如下:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/btn_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show"/> <Button android:id="@+id/btn_gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="GONE"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ViewStub android:id="@+id/viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout="@layout/view"/> </LinearLayout> </LinearLayout>
通过Button事件控制<ViewStub />的重现。
view.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"> <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
通过<ViewStub />加载进度条,上面主要是实现进度条的加载。
MainActivity.java
package example.com.viewstub; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewStub; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button mButtonShow,mButtonInvisible,mViewBtn; private ViewStub stub; private static int mCount = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); initData(); } private void initData() { mButtonShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mCount == 1) { stub.setVisibility(View.VISIBLE); mCount = 0; }else{ stub.setVisibility(View.INVISIBLE); mCount = 1; } mCount ++; } }); mButtonInvisible.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stub.setVisibility(View.INVISIBLE); } }); } private void initUI() { mButtonShow = (Button)findViewById(R.id.btn_show); mButtonInvisible = (Button)findViewById(R.id.btn_gone); stub = (ViewStub)findViewById(R.id.viewstub); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
主要是通过两个Button事件控制<ViewStub />的复现与隐藏。
运行效果图
运行及点击GONE页面 点击show显示ViewStub事件
源码下载地址:http://download.csdn.net/detail/u012721519/9500622
Good luck!
Write by Jimmy.li
相关文章推荐
- Android UI优化之merge标签的使用
- Maximum Subsequence Sum[PAT1007][PTA01-复杂度2]——动态规划
- intercepting IO request
- mathtype需要安装一个较新版本的MT Extra (TrueType)字体
- Android UI优化之include标签的使用
- String,StringBuffer与StringBuilder的区别
- ZOJ 3940 Modulo Query
- android studio之build.gradle写法简介
- UEFI和Le 4000 gacy启动U盘安装系统的区别
- Java Specification Requests
- java--StringBuilder
- 【arduino】常见的几个传感器的使用
- request.getParameter() 和request.getAttribute() 区别
- Exported service does not require permission问题。
- FlashBuilder 4.6序列号破解
- Hibernate中的query.setFirstResult(),query.setMaxResults();
- String、StringBuffer与StringBuilder之间区别
- Android 高级UI设计笔记13:Gallery(画廊控件)之 循环显示图像
- HDU 5191 Building Blocks
- PyQt + QtDesigner的ui文件