android开发布局优化之ViewStub

使用ViewStub可以延迟加载一个布局文件,提高显示速率。刚开始接触到,记录下来。

关于viewstub的使用,我们可以在不同的布局中使用,比如可以根据设备的大小动态决定显示哪个界面。

viewstub和include比较像,都是在一个布局文件中嵌入另外一个布局文件,然而viewstub是可以说是延迟加载,它只会在你手动指定加载的时候才会加载这个布局文件,而include则会立即加载。

在布局中使用ViewStub标签来引入文件

<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="com.example.viewstub.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="显示/隐藏" />

    <ViewStub
        android:id="@+id/vs"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:inflatedId="@+id/inflated_id"
        android:layout="@layout/view_stub_layout" />

</LinearLayout>

view_stub_layout.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:orientation="vertical" >
<TextView
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="vs中的tv"
    />    

</LinearLayout>

这是布局文件,那么怎么在程序运行时加载这个布局呢?

public class MainActivity extends ActionBarActivity {

    private ViewStub stub;
    private boolean isShow = true;
    private TextView tv;

    /* (non-Javadoc)
     * @see android.support.v7.app.ActionBarActivity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //布局的加载有两种方式,一种是stub.inflate();
        //另一种是stub.setVisibility(View.VISIBLE);
        stub = (ViewStub) this.findViewById(R.id.vs);
//      stub.inflate();
        stub.setVisibility(View.VISIBLE);
        //实例化之后就可以拿到stub布局的根节点,然后可以对之进行操作
        View root = this.findViewById(R.id.inflated_id);
        //注意要先实例化stub,然后才可以拿到tv
        tv = (TextView) root.findViewById(R.id.tv);
        root.setBackgroundColor(Color.BLUE);
    }

    public void onClick(View v){
        switch (v.getId()) {
        case R.id.toggle:
            if (isShow) {
                stub.setVisibility(View.GONE);
            }else{
                stub.setVisibility(View.VISIBLE);
                tv.setText("---");
            }
            isShow = !isShow;
            break;

        default:
            break;
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

时间: 2024-07-30 22:05:14

android开发布局优化之ViewStub的相关文章

Android开发性能优化总结(一)

安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢:动画执行过程不流畅,或者动画执行卡顿时间长:ListView列表滑动过程中卡顿,不流畅:应用程序自定义的某特定界面执行速度慢:响应某一用户事件时长时间无响应(ANR):操作数据库时,执行大量数据的增删改查操作,执行速度

Android开发性能优化总结(二)

接上一篇<Android开发性能优化总结(一)> 一.安卓UI性能检测与优化 UI是安卓应用程序与用户打交道的最直接途径,UI设计的好不好,直接影响到用户的体验,如果没有达到他们心目中的自然流畅细节,用户要是能够感觉出来,少则影响心情,多则卸载应用:所以一个应用的UI显示性能问题就不得不被开发人员重视. 1.UI卡顿常见原因: 在UI线程中做了耗时操作,导致UI线程卡顿: 布局Layout过于复杂,无法在16ms内完成渲染: 同一时间动画执行的次数过多,导致CPU或GPU负载过重: View过

Android开发布局简单介绍

Android开发布局介绍 1.线性布局 LinearLayout 布局中的组件会一个挨着一个排列起来,android:orientation属性可以控制排列方向,horizontal-水平.vertical-垂直 线性布局不会自动换行,当超出屏幕范围时,剩下的组件不会显示出来. 2.表格布局 TableLayout 继承自LinearLayout,其本质依然是LinearLayout.通过TableRow来管理表格的行数和列数.添加一个TableRow就是一行. 3.帧布局 FrameLayo

【转】Android布局优化之ViewStub

ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及特定的方法.当ViewStub使用在布局文件中时,当程序inflate布局文件时,ViewStub本身也会被解析,且占据内存控件,但是与其他控件相比,主要区别体现在以下几点: 1.当布局文件inflate时,ViewStub控件虽然也占据内存,但是相相比于其他控

[Android]Android布局优化之 ViewStub

转载请标注:转载于http://www.cnblogs.com/Liuyt-61/p/6602926.html ---------------------------------------------------------------- >使用ViewStub惰性加载 作用:ViewStub标签同include标签一样可以用来引入一个外部布局,不同的是,ViewStub引入的布局默认不会扩张,既不会占用显示,也不会占用位置,从而在解析layout时节省cpu和内存. common_text.

(转) Android开发性能优化简介

作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以需要开发人员更加专心去实现和优化你的代码了.选择合适的算法和数据结构永远是开发人员最先应该考虑的事情.同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事:(2)不要分配不必要的内存. 我从去年开始接触Android开发,以下结合自己的一点项目经验,同时参考了Google的优

android开发的优化问题

昨天接到个电话面试,谈谈android开发中的优化问题,回答的不太如人意.现记录如下: 1.使用布局文件 比如:用ScrollView . ListView 和 Fragment ,注意 ScrollView和ListView嵌套使用的时候,会出问题,详细看这篇文章:http://www.cnblogs.com/asijack/p/4282997.html 2.使用文件夹 可以将,不同的图片.字符串.布局文件.外形.颜色等这些资源,放在不同的文件夹中 可以看到在400,600,800dp的文件中

布局优化之ViewStub源码分析

源码分析 1 @RemoteView 2 public final class ViewStub extends View { 3 private int mInflatedId; 4 private int mLayoutResource; 5 6 private WeakReference<View> mInflatedViewRef; 7 8 private LayoutInflater mInflater; 9 private OnInflateListener mInflateLis

Android 冗余布局优化

系统填充布局是一个巨大的开销,过多的布局嵌套和VIEW对应用的性能有很大的影响.为了应用的运行流畅和响应快速,我们应该尽可能的使布局简单和避免因为较小的UI改变而重新填充布局的情况. 1.冗余的布局是冗余的 如果有关Frame中间嵌套了一个Linearlayout,它们都被设置成了MATCH_PARENT,这样做就是冗余的,只是增加了填充布局的时间而已.所以我们在布局中添加子布局时,应该注意查找冗余布局. 因为布局是可以被任意嵌套的,所以容易造成复杂,多层的布局,这是不提倡的,我们应尽量保持布局