布局优化

Android SystemUI——自定义状态栏和导航栏(十二) 通过前面的文章内容,我们了解了Android系统原生的状态栏StatusBar和车载系统状态栏CarStatusBar的启动流程以及视图构建流程,这里我们来简单的看一下自定义状态栏和导航栏视图的实现流程。 阅读详情

布局优化

  • 去除不必要的嵌套和节点
    这是最基本的一条,但也是最不好做到的一条,往往不注意的时候难免会一些嵌套等。

    • 首次不需要的节点设置为GONE或使用ViewStud.
    • 使用Relativelayout代替LinearLayout.
      平时写布局的时候要多注意,写完后可以通过Hierarchy Viewer或在手机上通过开发者选项中的显示布局边界来查看是否有不必要的嵌套。
  • 使用include
    include可以用于将布局中一些公共的部分提取出来。在需要的时候使用即可,比喻一些页面统一的loading页。
    include标签的layout属性指定所要包含的布局文件,我们也可以通过android:id或者一些其他的属性来覆盖被引入布局的根节点所对应
    的属性值。
    xml
    <include
    layout="@layout/loading"
    android:id="@+id/loading_main" />

    loading.xml内容为:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ProgressBar
            android:id="@+id/pb_loadiing"
            android:layout_width="28dip"
            android:layout_height="28dip"
            android:layout_centerInParent="true"
            android:indeterminateDrawable="@drawable/progressbar_anim_drawable" />
    
        <TextView
            android:layout_below="@id/pb_loadiing"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="loading..."
            android:textSize="15sp" />
    </RelativeLayout>
  • 使用<merge>标签
    merge可以有效的解决布局的层级关系。我们通过一个例子来说明一下:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
    
            android:scaleType="center"
            android:src="@drawable/ic_launcher" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dip"
            android:textSize="22sp"
            android:textColor="#990000"
            android:layout_gravity="center_horizontal|bottom"
            android:text="TEST" />
    
    </FrameLayout>

    我们在一个页面中显示该部分内容,运行后观察Hierarchy Viewer。
    image
    我们会发现除了我们布局最外层还会有一层FrameLayout,这是因为Activity内容视图的parent view就是一个FrameLayout,所以对于我们来说无意中已经多了一层毫无意义的布局。
    接下来merge的功能就能发挥了,修改代码如下。

    <merge xmlns:android="http://schemas.android.com/apk/res/android">
    
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scaleType="center"
            android:src="@drawable/ic_launcher" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dip"
            android:textSize="22sp"
            android:textColor="#990000"
            android:layout_gravity="center_horizontal|bottom"
            android:text="TEST" />
    
    </merge>

    接下来我们在用Hierarchy Viewer观察就会发现完美的去掉了一层FrameLayout
    image
    当然上面我们使用merge是因为跟布局正好是FrameLayout并且没有backgroud和padding等这些属性。如果根本局是LinearLayout等,就没法直接使用merge了。
    在include的时候很容易造成布局层级嵌套过多,结合merge使用能有效解决这个问题。

  • 使用ViewStub
    ViewStub标签与include一样可以用来引入一个外部布局,但是Viewstub引入的布局默认不会解析与显示,宽高为0,View也为null,这样就会在解析layout时节省cpu和内存。简单的理解就是ViewStub是
    include加上GONE.ViewStub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等.

    <?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_unreachble"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout="@layout/network_unreachble" />
    
    </RelativeLayout>

    在代码中通过(ViewStub)findViewById(id)找到ViewStub,使用inflate()展开ViewStub,然后得到子View,如下:

    private View mNetErrorView;
    
    private void showNetError() {
        if (mNetErrorView != null) {
            mNetErrorView.setVisibility(View.VISIBLE);
            return;
        }
    
        ViewStub stub = (ViewStub)findViewById(R.id.network_unreachble);
        // 解析并且显示该部分,返回值就是解析后的该`View`
        mNetErrorView = stub.inflate();
        Button networkSetting = (Button)mNetErrorView.findViewById(R.id.bt_network);
    }
    
    private void showNormal() {
        if (mNetErrorView != null) {
            mNetErrorView.setVisibility(View.GONE);
        }
    }

    或者也可以通过第二种方式:

    View viewStub = findViewById(R.id.network_unreachble);
    // ViewStub被展开后的布局所替换
    viewStub.setVisibility(View.VISIBLE);   
    // 获取展开后的布局
    mNetErrorView =  findViewById(R.id.network_unreachble); 
  • 减少不必要的Inflate
    如上一步中stub.infalte()后将该View进行记录或者是ListView中item inflate的时候。


  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量 pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量 阅读详情

相关推荐

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员和移动办公用户,支持多种数据源和可视化工具,大幅提升工作效率。

weixin_30897233的博客 606

Android内存优化(二)--布局优化

下面讲解下Android中的布局优化: 一.减少布局文件的层次 1.有RelativeLaout和LinearLayout选择LinearLayout 因为前者功能比较复杂,他的布局过程需要花费更多的CUP时间。记住了吗???----记住了... 2.LinearLayout嵌套时,能用FrageLayout替代,就用FrageLayout 因为ViewGroup的嵌套相当于增加

蝌蚪鱼 756

什么是Claude 的 Agent Skills?

摘要: Claude的Agent Skills功能支持通过结构化技能包(含指令、脚本、工具)实现任务自动化,如数据分析、文档生成等。核心能力包括:1)技能包管理(如Python脚本+模板);2)工具调用(API/数据库交互);3)子代理协作(拆分复杂任务)。快速上手步骤:创建技能包(如Excel报表生成)、配置工具权限、触发执行;支持多代理并行处理(如SQL查询+可视化)。关键技巧:工具需明确定义参数、利用子代理共享上下文、注重权限管控。官方文档与社区资源提供进阶指导,使Claude成为可编程的数字助手。

jobleap.cn求职助手首页 1731

Android性能优化系列之布局优化

我们注意看注释5处,这里就解释了为什么include标签和被引入的布局的根元素都设置了id的情况下,通过被引入的根元素的id来查找子控件会找不到的情况。我们看到,注释5处的会判断include标签的id如果不是View.NO_ID的话会把该id设置给被引入的布局根元素的id,即此时在我们的例子中被引入的id为my_foot_parent_id的根元素RelativeLayout的id被设置成了include标签中的id,即RelativeLayout的id被动态修改成了”my_foot_ly”。

Gaga246的博客 2176

STM32F4驱动ADS1220高精度ADC:从SPI配置到数据校准的完整实战指南

本文详细介绍了如何使用STM32F4微控制器驱动ADS1220高精度ADC,涵盖从SPI接口配置、寄存器设置到数据采集与校准的全过程。通过实战代码示例和硬件设计要点,帮助开发者快速构建高精度数据采集系统,适用于工业测量和精密仪器等应用场景。

weixin_26918763的博客 226

vue3+ts项目里如何使用状态管理pinia以及数据持久化

vue3 pinia 数据持久化

ICUiseeyou的博客 8796

一篇文章搞定《Android布局优化》

Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心问题就是要解决因布局渲染性能不佳而导致应用卡顿的问题,所以它可以认为是卡顿优化的一个子集。本文主要包括以下内容: 1. 为什么要进行布局优化及android绘制,布局加载原理 2. 获取布局文件加载耗时的方法 3. 介绍一些布局优化的手段与方法

小孟来码的博客 8415

告别Qweb!用ReportBro在Odoo 13-19版本中5步搞定动态报表

本文介绍了如何在Odoo 13-19版本中使用ReportBro替代Qweb快速实现动态报表设计。通过5步集成指南,包括环境准备、前端集成、后端服务搭建等,展示了ReportBro在可视化设计、即时预览和多格式输出(PDF/XLSX)方面的优势,显著提升开发效率和报表灵活性。

mac99的博客 801

常用Android布局文件优化技巧总结

Android 布局加载是 Android 应用程序的重要组成部分。布局加载是指将 XML 文件中定义的视图层次结构加载到内存中。在这篇文章中,我们将深入探讨 Android 布局加载的原理,包括 Android 布局文件的结构、布局文件的解析过程、布局文件的优化和布局文件的常见问题等方面。

xiaokangss的博客 1157

RT-DETR改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点

本文记录的是利用模块优化的目标检测网络模型。的目的是在不出现过参数化的情况下有效地增加卷积的感受野,从而解决了在感受野扩展中的参数膨胀问题。本文将其加入到深度可分离卷积中,有效降低模型参数量和计算量,并二次创新,使模块更好地捕捉低频特征,增强网络性能。Wavelet Convolutions for Large Receptive Fields小波卷积及其改进的实现代码如下: 四、创新模块 4.1 改进点1⭐ 模块改进方法:加入(第五节讲解添加步骤)。添加后如下:模块改进方法:基于的(第五节讲解添加步骤)

Limiiiing的博客 1505

华为OD新系统机试真题 - API请求日志去重分析

华为OD新系统机试真题【API请求日志去重分析】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【API请求日志去重分析】

qq_45776114的博客 918

Android 性能优化之布局优化

绘制原理 双缓冲机制 布局加载原理 检测耗时 常规方式 AOP方式 获取控件加载耗时 布局优化 AsyncLayoutInflater方案 Compose方案 减少布局层级和复杂度 避免过度绘制

xiangxiongfly 1552

TMC2240 芯片数据手册解读|第十三篇 StallGuard4负载测量(StallGuard4 Load Measurement)

摘要: TMC2240的StallGuard4技术专为StealthChop2静音模式设计,通过SG4_RESULT实时测量电机负载,实现堵转检测、无传感器回零和CoolStep节能。其核心原理基于负载角检测,通过SG4_THRS阈值调节灵敏度,并支持四通道独立测量(SG4_IND_0~3)优化相位平衡。独特功能包括无抖动模式切换补偿(sg_angle_offset),解决StealthChop2与SpreadCycle切换时的电流突变问题。调优时需结合SG4_THRS设定与DIAG验证,确保堵转精准触发。

BackCatK Chen的博客 308

vivado 详细布局、布局后优化

vivado 详细布局、布局后优化

cckkppll的博客 3727

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android 布局优化方案

在 Android 开发中,UI 布局可以说是每个 App 使用频率很高的,随着 UI 越来越多,布局的重复性、复杂度也会随之增长,这样使得 UI布局的优化,显得至关重要,UI 布局不慎,就会引起过度绘制,从而造成 UI 卡顿的情况,本篇文章就来总结一下 UI 布局优化的相关技巧。

lixiong0713的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

基于遗传算法的车间布局优化建模问题,完整matlab代码,可自行修改车间的长和宽。

jayxiaoxionger的博客 4973

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 布局优化

Android布局优化,多套方案全面解析布局优化的原因:布局嵌套过深,或者其他原因导致布局渲染性能不佳,可能会导致应用卡顿。CPU:执行应用层的measure、layout、draw等操作,绘制完成后将数据提交给GPUGPU:进一步处理数据,并将数据缓存起来屏幕:由一个个像素点组成,以固定的频率(16.6ms,即1秒60帧)从缓冲区中取出数据来填充像素点总结一句话就是:CPU 绘制后提交数据、GPU 进一步处理和缓存数据、最后屏幕从缓冲区中读取数据并显示。双缓冲机制。

GuanZhong12345的博客 995

Android 布局优化

布局是一个App非常关键的一部分,布局性能的好坏可直接影响到用户的体验。试想下如果一个RecyclerView滑动时异常卡顿,那用户估计也没有心情去住下滑了,可能就直接强制杀掉App了去,然后回过头去应用商店给个差评“卡的不要不要的”。虽然现在手机内存、CPU等各项性能都上来了看起来很强,实际上还是卡的不行,所以我们还是要多学习下性能优化方面的知识。 本文将分三个部分来介绍Android布局优化的...

weixin_34392435的博客 124

android如何对布局优化,Android中View作图优化之一- 优化布局层次

Android中View绘制优化之一---- 优化布局层次本文原创, 转载请注明出处:http://blog.youkuaiyun.com/qinjuning前言,竟然是翻译,当然得弄的有板有眼。 照着大作家格式来咯 , - - 。译序最近一直在做锁屏界面,之前也写过关于锁屏界面的一些简单原理,未曾想自己真正去深入理解锁屏时,才发觉锁屏框架真是又大又复杂,主要体现在如下两个方面:1、界面的组成以及更新机制;2...

weixin_36078737的博客 240

性能优化-布局优化

性能优化-布局优化

qq_34358193的博客 1353

HarmonyOS 布局优化

摘要: 本文探讨了HarmonyOS应用开发中的布局优化策略,通过减少节点数量、利用布局边界和合理控制组件显隐,显著提升UI性能。测试数据显示: 精简节点:平铺布局比嵌套减少20%节点,性能提升明显; 固定尺寸:设置宽高固定值的组件重绘耗时降低19倍; 显隐控制:使用if/else比visibility在隐藏时减少60%布局耗时。优化后的布局可有效解决卡顿、内存占用高等问题,提升用户体验。

不懂先生的博客 1732

你想知道的布局优化都在这里了

人到中年不得已,莫愁前路有知己! Android性能优化系列专栏第三篇:上一篇中通过图文加实战的方式介绍了Android的内存优化,有需要的可以翻看一下:《你的应用内存优化了吗?》,今天我们就继续来说说Android中的布局优化相关的知识。

江湖人陆仁甲 1786

android中的布局优化

android中的布局优化 简介 用最少的view写出一样的效果,优化分为重用,合并,按需载入 android中的dp、px、dip相关概念 px:是屏幕的像素点 dp:一个基于density的抽象单位, px = dip * density / 160,则当屏幕密度为160时,px = dip 如果一个dpi的屏幕,1dp=1px dip:等同于dp TextView 的字号最...

luyuqin0115的博客 2168

android布局优化方案,Android启动优化-布局优化

Android启动优化-布局优化安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入技术、性能优化、行业新技术、系统架构等方面的进步。安卓系统自诞生至今,经历了几次重要更新,最后选择了折中方案,使系统在安装和运行时各项指标都得到了优化,至此,安卓虚拟机的开发过程告终。Android的启...

weixin_39625162的博客 177

APP性能优化——布局优化

1、简介 有人对安卓的性能总结为快、稳、省、小,四字真言简单直接;本篇主要聊一下快当中布局优化,也是性能优化中最简单的一部分,可能有人认为布局的修改对性能优化的提升微乎其微,但积少成多性能总是被无数细微的点拖垮的,更何况当你明知道代码当中有可以优化的地方,难道会放着不动吗? 2、安卓系统显示原理 Android 显示过程可以简单概括为:Android 应用程序把经过测量、布局、绘制后的 ...

浅谈Android 1250

Android 布局优化-常用布局优化工具

1.Hierarchy Viewer 2.Lint (1)Hierarchy Viewer Hierarchy Viewer是Android自带的一款可视化调试工具,用来检查Layout嵌套及绘制时间。以可视化的布局角度直观获取Layout布局设计和各种属性信息。 注:由于Android安全考虑Hierarchy Viewer只能连接Android开发手机或模拟器。 接下来介绍如何使用Hiera...

Lud的博客 1405
上一篇: 视频播放相关内容总结
下一篇: 性能优化
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值