Android开发优化之——对界面UI的优化(经验分享)
为什么80%的码农都做不了架构师?>>>
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的。界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局。通常,在这个页面中会用到很多控件,控件会用到很多的资源。Android系统本身有很多的资源,包括各种各样的字符串、图片、动画、样式和布局等等,这些都可以在应用程序中直接使用。这样做的好处很多,既可以减少内存的使用,又可以减少部分工作量,也可以缩减程序安装包的大小。
下面从几个方面来介绍如何利用系统资源。
1)利用系统定义的id
比如我们有一个定义ListView的xml文件,一般的,我们会写类似下面的代码片段。
<ListView android:id="@+id/mylist" android:layout_width="fill_parent" android:layout_height="fill_parent"/> |
这里我们定义了一个ListView,定义它的id是"@+id/mylist"。实际上,如果没有特别的需求,就可以利用系统定义的id,类似下面的样子。
<ListView android:id="@android :id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/> |
在xml文件中引用系统的id,只需要加上“@android :”前缀即可。如果是在Java代码中使用系统资源,和使用自己的资源基本上是一样的。不同的是,需要使用android.R类来使用系统的资源,而不是使用应用程序指定的R类。这里如果要获取ListView可以使用android.R.id.list来获取。
2)利用系统的图片资源
假设我们在应用程序中定义了一个menu,xml文件如下。
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_attachment" android:title="附件" android:icon="@android :drawable/ic_menu_attachment" /> </menu> |
其中代码片段android:icon="@android :drawable/ic_menu_attachment"本来是想引用系统中已有的Menu里的“附件”的图标。但是在Build工程以后,发现出现了错误。提示信息如下:
error: Error: Resource is not public. (at 'icon' with value '@android :drawable/ic_menu_attachment'). |
从错误的提示信息大概可以看出,由于该资源没有被公开,所以无法在我们的应用中直接引用。既然这样的话,我们就可以在Android SDK中找到相应的图片资源,直接拷贝到我们的工程目录中,然后使用类似android:icon="@drawable/ic_menu_attachment"的代码片段进行引用。
这样做的好处,一个是美工不需要重复的做一份已有的图片了,可以节约不少工时;另一个是能保证我们的应用程序的风格与系统一致。
经验分享: Android中没有公开的资源,在xml中直接引用会报错。除了去找到对应资源并拷贝到我们自己的应用目录下使用以外,我们还可以将引用“@android”改成“@*android”解决。比如上面引用的附件图标,可以修改成下面的代码。 android:icon="@*android:drawable/ic_menu_attachment" 修改后,再次Build工程,就不会报错了。 |
3)利用系统的字符串资源
假设我们要实现一个Dialog,Dialog上面有“确定”和“取消”按钮。就可以使用下面的代码直接使用Android系统自带的字符串。
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/yes" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@android :string/yes"/> <Button android:id="@+id/no" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@android :string/no"/> </LinearLayout> |
如果使用系统的字符串,默认就已经支持多语言环境了。如上述代码,直接使用了@android :string/yes和@android :string/no,在简体中文环境下会显示“确定”和“取消”,在英文环境下会显示“OK”和“Cancel”。
4)利用系统的Style
假设布局文件中有一个TextView,用来显示窗口的标题,使用中等大小字体。可以使用下面的代码片段来定义TextView的Style。
<TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" /> |
其中android:textAppearance="?android:attr/textAppearanceMedium"就是使用系统的style。需要注意的是,使用系统的style,需要在想要使用的资源前面加“?android:”作为前缀,而不是“@android :”。
5)利用系统的颜色定义
除了上述的各种系统资源以外,还可以使用系统定义好的颜色。在项目中最常用的,就是透明色的使用。代码片段如下。
android:background ="@android :color/transparent" |
经验分享: Android系统本身有很多资源在应用中都可以直接使用,具体的,可以进入android-sdk的相应文件夹中去查看。例如:可以进入$android-sdk$\platforms\android-8\data\res,里面的系统资源就一览无余了。 开发者需要花一些时间去熟悉这些资源,特别是图片资源和各种Style资源,这样在开发过程中,能够想到有相关资源并且直接拿来使用。 |
转载于:https://my.oschina.net/luqin/blog/106615
Android开发优化之——对界面UI的优化(经验分享)相关推荐
- [Android] Android开发优化之——对界面UI的优化(2)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...
- Android开发社招面试解答之性能优化,鬼知道我经历了啥
写在前面 1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷--尽管很多时候我们自己知 ...
- 全数据驱动产品优化,美国互联网公司A/B测试经验分享
全数据驱动产品优化,美国互联网公司A/B测试经验分享 width="22" height="16" src="http://hits.sinaj ...
- android平台短视频技术之 视频编辑的经验分享
android平台短视频技术之 视频编辑的经验分享. 提示一: 各位看官,这里分享的是视频编辑,即剪切/拼接/分离/合并/涂鸦/标记/叠加/滤镜等对视频的编辑操作.不是流媒体网络播放等功能,请注意. ...
- android如何用代码实现界面ui
如何用代码实现界面ui demo: 1.AndroidManifest.xml <?xml version="1.0" encoding="utf-8"? ...
- 【Android开发基础】应用界面主题Theme使用方法
主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status B ...
- Android开发-WebView的缓存处理和性能优化 实现H5页面秒开【四】
前言 老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面 ...
- eclipse Android 开发基础 Activity 窗体 界面
eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form. 新建Activity自动生成src下同名的java代码. pu ...
- 安卓嵌入式开发教程!Android开发热门前沿知识,2年以上经验必看
前言 近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 App 从无到有再到火爆的整个开发过程中,顺理成章地拿到了 Leade ...
最新文章
- Python会消亡吗?
- python中的object是什么意思_Python object类中的特殊方法代码讲解
- Scala变量和常量
- 正经科普:12306能扛得住明星并发出轨级的流量吗?
- 解决 Angular 官网下载的库 Schematics 在 windows 环境不支持 .. 的临时解决方案
- ajax能运用到app吗,Jquery之Ajax运用 学习运用篇
- visual studio code更新
- ubuntu环境变量相关文件/etc/profile,/etc/bash.bashrc,~/.profile,~/.bashrc区别
- 【读书笔记】摘自Google开源项目风格指南-C++风格指南
- 零基础入门深度学习(2) - 线性单元和梯度下降
- c++ List、Vector、Stack、Queue使用
- python标准化输出到txt_3大利器推荐,帮你写出规范漂亮的python代码
- tcping要安装什么工具linux,Linux下的TCP测试工具——TCPING安装简明教程
- zzulioj题库题解(持续更新中.......)
- 虚拟机C盘上建HTML文件怎,电脑如何通过VMware虚拟机映射本地磁盘实现文件共享...
- java爬小说_java爬虫实战开发小说网站
- python是一种蟒蛇使用的语言_python树莓派系列教程一:初识大蟒蛇 python(python语言环境搭建篇)...
- 百度鹰眼轨迹后台的移植
- 用支付宝小程序,做一笔价值百亿的洗衣生意
- Java基于springboot+vue的眼镜销售购物商城系统 element 前后端分离
热门文章
- 人类将可能操控AI?神经网络语言处理工作原理被破解
- 谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」
- 高文院士:中国在AI领域有哪些长板和短板
- 我们生活在一个虚拟世界的概率有多大?
- 信息科学部鼓励科学家更多瞄准“原创”研究
- 从城市治理到城市“智”理,AI 不仅是城市管理的“眼睛”
- 科技巨头纷纷从刷脸转向“刷手”,指纹如何扛起生物识别大旗?
- 由4G向5G进发的物联网:NB-IoT与LTE-M
- 中国科学家将绘制最精细人脑三维“地图”
- 谷歌母公司投资成绩:4大机构各有侧重,投资2个马斯克项目