当前位置:首页 » 安卓系统 » android布局优化

android布局优化

发布时间: 2022-01-12 12:58:31

❶ android 很长的复杂页面 怎么优化布局

先找主语谓语宾语再找定语以及其他部分。

❷ Android应用性能优化的内容简介

今天的Android应用开发者经常要想尽办法来提升程序性能。由于应用越来越复杂,这个问题也变得越来越棘手。本书主要介绍如何快速高效地优化应用,让应用变得稳定高效。你将学会利用Android SDK和NDK来混合或单独使用java、C/C++来开发应用。书中还特别讲解了如下内容:
· 一些OpenGL的优化技术以及RenderScript(Android的新特性)的基础知识;
· 利用SDK来优化应用的Java代码的技巧;
· 通过高效使用内存来提升性能的技巧;
· 延长电池使用时间的技巧;
· 使用多线程的时机及技巧;
· 评测剖析代码的技巧。
把本书的内容学以致用,你的编程技术就会得到关键性的提升,写出的应用就会更为健壮高效,从而广受用户好评,并最终获得成功。
目录
第1章Java代码优化1.1Android如何执行代码1.2优化斐波纳契数列1.2.1从递归到迭代1.2.2BigInteger1.3缓存结果1.4API等级1.5数据结构1.6响应能力1.6.1推迟初始化1.6.2StrictMode1.7SQLite1.7.1SQLite语句1.7.2事务1.7.3查询
第1章Java代码优化1.1Android如何执行代码1.2优化斐波纳契数列1.2.1从递归到迭代1.2.2BigInteger1.3缓存结果1.4API等级1.5数据结构1.6响应能力1.6.1推迟初始化1.6.2StrictMode1.7SQLite1.7.1SQLite语句1.7.2事务1.7.3查询1.8总结
第2章NDK入门2.1NDK里有什么2.2混合使用Java和C/C++代码2.2.1声明本地方法2.2.2实现JNI粘合层2.2.3创建Makefile2.2.4实现本地函数2.2.5编译本地库2.2.6加载本地库2.3Application.mk2.3.1为(几乎)所有设备优化2.3.2支持所有设备2.4Android.mk2.5使用C/C++改进性能2.6本地Acitivity2.6.1构建缺失的库2.6.2替代方案2.7总结
第3章NDK进阶3.1汇编3.1.1最大公约数3.1.2色彩转换3.1.3并行计算平均值3.1.4ARM指令3.1.5ARM NEON3.1.6CPU特性3.2C扩展3.2.1内置函数3.2.2向量指令3.3技巧3.3.1内联函数3.3.2循环展开3.3.3内存预读取3.3.4用LDM/STM替换LDR/STD3.4总结
第4章高效使用内存4.1说说内存4.2数据类型4.2.1值的比较4.2.2其他算法4.2.3数组排序4.2.4定义自己的类4.3访问内存4.4排布数据4.5垃圾收集4.5.1内存泄漏4.5.2引用4.6API4.7内存少的时候4.8总结
第5章多线程和同步5.1线程5.2AsyncTask5.3Handler和Looper5.3.1Handler5.3.2Looper5.4数据类型5.5并发5.6多核5.6.1为多核修改算法5.6.2使用并发缓存5.7Activity生命周期5.7.1传递信息5.7.2记住状态5.8总结
第6章性能评测和剖析6.1时间测量6.1.1System.nanoTime()6.1.2Debug.threadCpuTimeNanos()6.2方法调用跟踪6.2.1Debug.startMethodTracing()6.2.2使用Traceview工具6.2.3DDMS中的Traceview6.2.4本地方法跟踪6.3日志6.4总结
第7章延长电池续航时间7.1电池7.2禁用广播接收器7.3网络7.3.1后台数据7.3.2数据传输7.4位置7.4.1注销监听器7.4.2更新频率7.4.3多种位置服务7.4.4筛选定位服务7.4.5最后已知位置7.5传感器7.6图形7.7提醒7.8WakeLock7.9总结
第8章图形8.1布局优化8.1.1相对布局8.1.2合并布局8.1.3重用布局8.1.4ViewStub8.2布局工具8.2.1层级视图8.2.2layoutopt8.3OpenGL ES8.3.1扩展8.3.2纹理压缩8.3.3Mipmap8.3.4多APK8.3.5着色8.3.6场景复杂性8.3.7消隐8.3.8渲染模式8.3.9功耗管理8.4总结
第9章RenderScript9.1概览9.2Hello World9.3Hello Rendering9.3.1创建渲染脚本9.3.2创建RenderScriptGL Context9.3.3展开RSSurfaceView9.3.4设置内容视图9.4在脚本中添加变量9.5HelloCompute9.5.1Allocation9.5.2rsForEach9.5.3性能9.6自带的RenderScript API9.6.1rs_types.rsh9.6.2rs_core.rsh9.6.3rs_cl.rsh9.6.4rs_math.rsh9.6.5rs_graphics.rsh9.6.6rs_time.rsh9.6.7rs_atomic.rsh9.7RenderScript与NDK对比9.8总结

❸ 怎么处理安卓布局才能使其在大小屏幕上都能正常显示,有时在大屏手机上空白太多有时小屏幕又显示不全,

我的手机桌面上所有的软件或屏幕插件都可以在手机屏幕大小的允许下随意调整大小。

❹ 怎样android的布局优化加载

下面介绍几种切实有效的方式:

  1. merge

    顾名思义,就是合并、融合的意思。使用它可以有效的将某些符合条件的多余的层级优化掉。使用merge的场合主要有两处:

    (1)自定义View中使用,父元素尽量是FrameLayout,当然如果父元素是其他布局,而且不是太复杂的情况下也是可以使用的

    (2)Activity中的整体布局,根元素需要是FrameLayout

  2. ViewStub

    (1)ViewStub只能Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub指定的布局被Inflate后,就不能够再通过ViewStub来控制它了。所以它不适用 于需要按需显示隐藏的情况。
    (2)ViewStub只能用来Inflate一个布局文件,而不是某个具体的View,当然也可以把View写在某个布局文件中。如果想操作一个具体的view,还是使用visibility属性吧。
    (3) VIewStub中不能嵌套merge标签。(前面好像说过)
    不过这些确定都无伤大雅,我们还是能够用ViewStub来做很多事情。

  3. include

    制造这个标签纯碎是为了布局重用,在项目中通常会存在一些布局公用的部分,比如自义标题,我们不需要把一份代码Ctrl C, Ctrl V的到处都是,严重违背程序简洁化、模块儿化的设计思想

❺ Android布局优化的几种方式

1. include/merge

布局优化中常常用到include/merge标签,include的含义类似C代码中的include,意思是直接把指定布局片段包含进当前的布局文件。include适用于多个布局文件中存在相同的xml片段,比如说相同的标题栏、相同的广告栏、相同的进度栏等等。

2. ViewStub

在一个页面上根据不同条件展示不同的控件,我们常常会设置控件的可视属性,比如调用指定控件的setVisibility方法,若需展示则设置View.VISIBLE,若需隐藏则设置View.GONE。不过gone的控件只是看不到罢了,实际UI渲染时还是会被加载。要想事先不加载,在条件符合时才加载,就得用到标签ViewStub。

3. style样式

样式在res/values/styles.xml中定义,它适用于下面几种情况:
1、布局文件中存在多个具有相同风格的控件,比如说统一的文本框TextView,都是白底黑字、中号字体、居中显示,这时我们便可在styles.xml定义一种文本样式,然后在各文本框处声明它的style属性。好处一个是减少了布局文件的大小,另一个是方便以后统一修改风格。

2、某些控件在代码中声明时需要手工指定style,例如自定义对话框需要在构造函数中指定样式;另一个例子是弹窗PopupWindow在设置伸缩动画方法setAnimationStyle时需要指定动画样式。
3、定义页面的主题风格,然后应用到Activity页面。代码中设置主题可通过“setTheme(R.style.)”完成,布局中设置可在AndroidManifest.xml的activity节点下添加theme属性,如“android:theme=”@style/“”。

4. Theme主题

主题是一种特殊的样式,主题专用于页面,而样式一般运用于控件。主题定义一般放在themes.xml,样式定义一般放在styles.xml。
Android定义了一些系统主题,完整定义的参见sdk自带的themes.xml,常用的几种说明如下:
Theme.NoTitleBar : 不显示标题栏,即隐藏ActionBar
Theme.Light : 白色背景
Theme.Holo : 浅灰背景
Theme.Black : 黑色背景
Theme.Wallpaper : 壁纸
Theme.Translucent : 透明背景
Theme.Dialog : 对话框
Theme.Panel : 平板
Theme.InputMethod : 输入法
Theme.SearchBar : 搜索框

❻ 针对Android的性能优化集中哪些方面

一、概要:

本文主要以Android的渲染机制、UI优化、多线程的处理、缓存处理、电量优化以及代码规范等几方面来简述Android的性能优化

二、渲染机制的优化:

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。

Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

*关于JobScheler的更多知识可以参考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html

七、代码规范

1)for loop中不要声明临时变量,不到万不得已不要在里面写try catch。

2)明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)

3)合理使用数据类型,StringBuilder代替String,少用枚举enum,少用父类声明(List,Map)

4)如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。

5)你要知道单例的好处,并正确的使用它。

6)多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。

7)如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。需求变更不可怕,可怕的是没有在写代码之前做合理的设计。

8)View中设置缓存属性.setDrawingCache为true.

9)cursor的使用。不过要注意管理好cursor,不要每次打开关闭cursor.因为打开关闭Cursor非常耗时。Cursor.require用于刷cursor.

10)采用SurfaceView在子线程刷新UI,避免手势的处理和绘制在同一UI线程(普通View都这样做)

11)采用JNI,将耗时间的处理放到c/c++层来处理

12)有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右

13)懒加载和缓存机制。访问网络的耗时操作启动一个新线程来做,而不要再UI线程来做

14)如果方法用不到成员变量,可以把方法申明为static,性能会提高到15%到20%

15)避免使用getter/setter存取field,可以把field申明为public,直接访问

16)私有内部类要访问外部类的field或方法时,其成员变量不要用private,因为在编译时会生成setter/getter,影响性能。可以把外部类的field或方法声明为包访问权限

17)合理利用浮点数,浮点数比整型慢两倍

18)针对ListView的性能优化,ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。ListView中getView是性能是关键,这里要尽可能的优化。

getView方法中要重用view;getView方法中不能做复杂的逻辑计算,特别是数据库操作,否则会严重影响滑动时的性能

19)不用new关键词创建类的实例,用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。

clone()方法不会调用任何类构造函数。在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:

20)public static Credit getNewCredit() {
return new Credit();
}
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路对于数组处理同样很有用。

21)乘法和除法

考虑下面的代码:

  • for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
    用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:
    for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

  • 22)ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。

    23)每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费

    24)提高下载速度:要控制好同时下载的最大任务数,同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)

    25)提供加载速度:让服务端提供不同分辨率的图片才是最好的解决方案。还有合理使用内存缓存,使用开源的框架

    引用:Android性能优化的浅谈

    ❼ 如何对Android进行性能优化

    不知道你是说对系统优化还是什么app优化,

    系统优化就只能找底层人员的了,我也不是很了解。

    app优化的话,大体有以下几个方面

    1. ui优化,去除累赘的布局,优化初始化的速度,提高apk流畅性。

    2. 网络交互优化,好的网络和数据处理方式决定了app的体验性能。

    3. 检查内存是否有泄漏,人们常说的anr详细。

    如何你问的是android手机优化。

    平常人只能下载手机管家这种软件进行清除内存,垃圾,卸载无用的apk,保持android系统的流畅性。

    ❽ android 性能优化有哪些办法

    性能优化的常用方法

    主要内容包括布局优化,绘制优化,内存泄露优化,相应速度优化,ListView优化,Bitmap优化,线程优化等,下面主要给你举了其中的几个例子:

    (1)布局优化

    布局优化的思想很简单,就是尽量减少布局文件的层级。

    如何进行优化呢?首先删除布局中无用的控件和层级,其次有选择地使用性能较低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,这是因为RelativeLayout比较复杂,他的布局过程花费更多的CPU时间。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup,因此可以考虑使用他们,但是很多时候,单纯的通过一个LinearLayout或者FrameLayout无法实现产品的效果,需要通过嵌套的方式来完成,这种情况建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。

    布局优化的另一种手段是采用<include>标枪,<merge>标签和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,它可以减少布局的层级。而ViewStub则提供了按需加载功能,当需要时才将ViewStub中的布局加载到内存,这提高了程序的初始化效率。

    (2)绘制方法

    绘制优化是指View的onDraw方法避免执行大量的操作,这主要有两方面。

    首先,onDraw中不要创建新的布局对象,这是因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁的gc,降低了程序的执行效率。

    另一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万次循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。

    (3)内存泄露优化

    内存泄露在开发过程中是一个需要重视的问题,但是由于内存泄露问题对开发人员的经验和开发意识要求比较高,因此这是开发人员最容易犯的错误之一。内存泄露的优化分为两个方面,一方面是在开发过程中避免写出内存泄露的代码,另一方面通过一些分析工具比如MAT来找出潜在的内存泄露继而解决。

    关于性能优化的建议

    1.避免黄健过多对象;

    2.不要过多使用枚举,枚举占用的内存空间比整型大一些。

    3.常量使用staticfinal来修饰。

    4.使用一些Android特有的数据结构,比如SpareArray和Pair等,他们都具有更好的性能。

    5.适当使用软引用和弱引用。

    6.采用内存缓存和磁盘缓存

    7.尽量采用静态内部类,这样可以避免潜在的内部类而导致的内存泄漏。

    ❾ android studio hierarchy viewer 怎么看布局是否需要优化

    工具/原料

    android 基础
    91桌面
    数据线
    android手机
    方法/步骤

    在手机安装好91桌面哈,然后将页面滑到最左面的“快速搜索页”

    hierarchyviewer.bat是sdk自带的工具,在tools文件夹下。双击即可打开

    在此页面,加粗显示的就是当前进程,点击load view hierarchy就可以分层查看布局

    左边的大图,为应用图层的树形结构。上面有控件名称和id等信息。然后下面三个圆点代表渲染的速度,绿色最快,红色最慢,其中从左到右依次表示的是测量大小,布局和绘制。再看右下角的那个数字,代表的是此节点在父节点中的索引。

    整张图的右下角,表示的该应用的当前页面。在左边的树形图中点击某个节点,会在这里用红框标出响应的位置。左上角的图可以查看当前选中节点的具体布局数据,宽高什么的。

    这里可以看出“快速搜索屏”的实现是,
    draglayer--孩子--->workspacelayer-----孩子0---workspace;
    ------孩子1---singleViewGroup;
    singleViewGroup就是快速搜索屏的布局view
    在网上找到一个图,觉得很好,介绍的精确完整,贴过来,给大家看看

    ❿ android 布局优化使用什么标签

    android 布局优化主要使用抽象布局标签

    (1) <include>标签
    include标签常用于将布局中的公共部分提取出来供其他layout共用,以实现布局模块化,这在布局编写方便提供了大大的便利。
    下面以在一个布局main.xml中用include引入另一个布局foot.xml为例。main.mxl代码如下:

    Java<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
    android:id="@+id/simple_list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="@dimen/dp_80" />

    <include layout="@layout/foot.xml" />

    </RelativeLayout>

    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/simple_list_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="@dimen/dp_80" /> <include layout="@layout/foot.xml" /> </RelativeLayout>
    其中include引入的foot.xml为公用的页面底部,代码如下:

    Java<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dp_40"
    android:layout_above="@+id/text"/>

    <TextView
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dp_40"
    android:layout_alignParentBottom="true"
    android:text="@string/app_name" />

    </RelativeLayout>
    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="@dimen/dp_40" android:layout_above="@+id/text"/> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="@dimen/dp_40" android:layout_alignParentBottom="true" android:text="@string/app_name" /> </RelativeLayout>

    <include>标签唯一需要的属性是layout属性,指定需要包含的布局文件。可以定义android:id和android:layout_*属性来覆盖被引入布局根节点的对应属性值。注意重新定义android:id后,子布局的顶结点i就变化了。(2) <viewstub>标签
    viewstub标签同include标签一样可以用来引入一个外部布局,不同的是,viewstub引入的布局默认不会扩张,即既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存。
    viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等。
    下面以在一个布局main.xml中加入网络错误时的提示页面network_error.xml为例。main.mxl代码如下:

    Java<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    ……
    <ViewStub
    android:id="@+id/network_error_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout="@layout/network_error" />

    </RelativeLayout>
    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > …… <ViewStub android:id="@+id/network_error_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout="@layout/network_error" /> </RelativeLayout>

    其中network_error.xml为只有在网络错误时才需要显示的布局,默认不会被解析,示例代码如下:

    Java<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
    android:id="@+id/network_setting"
    android:layout_width="@dimen/dp_160"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="@string/network_setting" />

    <Button
    android:id="@+id/network_refresh"
    android:layout_width="@dimen/dp_160"
    android:layout_height="wrap_content"
    android:layout_below="@+id/network_setting"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/dp_10"
    android:text="@string/network_refresh" />

    </RelativeLayout>
    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/network_setting" android:layout_width="@dimen/dp_160" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="@string/network_setting" /> <Button android:id="@+id/network_refresh" android:layout_width="@dimen/dp_160" android:layout_height="wrap_content" android:layout_below="@+id/network_setting" android:layout_centerHorizontal="true" android:layout_marginTop="@dimen/dp_10" android:text="@string/network_refresh" /> </RelativeLayout>

    在java中通过(ViewStub)findViewById(id)找到ViewStub,通过stub.inflate()展开ViewStub,然后得到子View,如下:

    Javaprivate View networkErrorView;

    private void showNetError() {
    // not repeated infalte
    if (networkErrorView != null) {
    networkErrorView.setVisibility(View.VISIBLE);
    return;
    }

    ViewStub stub = (ViewStub)findViewById(R.id.network_error_layout);
    networkErrorView = stub.inflate();
    Button networkSetting = (Button)networkErrorView.findViewById(R.id.network_setting);
    Button refresh = (Button)findViewById(R.id.network_refresh);
    }

    private void showNormal() {
    if (networkErrorView != null) {
    networkErrorView.setVisibility(View.GONE);
    }
    }
    private View networkErrorView; private void showNetError() { // not repeated infalte if (networkErrorView != null) { networkErrorView.setVisibility(View.VISIBLE); return; } ViewStub stub = (ViewStub)findViewById(R.id.network_error_layout); networkErrorView = stub.inflate(); Button networkSetting = (Button)networkErrorView.findViewById(R.id.network_setting); Button refresh = (Button)findViewById(R.id.network_refresh);} private void showNormal() { if (networkErrorView != null) { networkErrorView.setVisibility(View.GONE); }}

    在上面showNetError()中展开了ViewStub,同时我们对networkErrorView进行了保存,这样下次不用继续inflate。这就是后面第三部分提到的减少不必要的infalte。

    viewstub标签大部分属性同include标签类似。上面展开ViewStub部分代码

    JavaViewStub stub = (ViewStub)findViewById(R.id.network_error_layout);
    networkErrorView = stub.inflate();
    ViewStub stub = (ViewStub)findViewById(R.id.network_error_layout);networkErrorView = stub.inflate();
    也可以写成下面的形式

    JavaView viewStub = findViewById(R.id.network_error_layout);
    viewStub.setVisibility(View.VISIBLE); // ViewStub被展开后的布局所替换
    networkErrorView = findViewById(R.id.network_error_layout); // 获取展开后的布局
    View viewStub = findViewById(R.id.network_error_layout);viewStub.setVisibility(View.VISIBLE); // ViewStub被展开后的布局所替换networkErrorView = findViewById(R.id.network_error_layout); // 获取展开后的布局
    效果一致,只是不用显示的转换为ViewStub。通过viewstub的原理我们可以知道将一个view设置为GONE不会被解析,从而提高layout解析速度,而VISIBLE和INVISIBLE这两个可见性属性会被正常解析。


    热点内容
    gon引擎自动回收脚本 发布:2024-09-20 05:39:39 浏览:246
    好医生连锁店密码多少 发布:2024-09-20 05:09:38 浏览:15
    魔兽脚本代理 发布:2024-09-20 05:09:35 浏览:98
    python登陆网页 发布:2024-09-20 05:08:39 浏览:757
    安卓qq飞车如何转苹果 发布:2024-09-20 04:54:30 浏览:178
    存储过程中in什么意思 发布:2024-09-20 04:24:20 浏览:315
    php显示数据 发布:2024-09-20 03:48:38 浏览:501
    源码安装软件 发布:2024-09-20 03:44:31 浏览:354
    入门编程游戏的书 发布:2024-09-20 03:31:26 浏览:236
    e盒的算法 发布:2024-09-20 03:30:52 浏览:144