文档章节

Android开发优化之——对界面UI的优化(1)

KingMing
 KingMing
发布于 2015/04/03 11:03
字数 1431
阅读 58
收藏 1

在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资源,这样在开发过程中,能够想到有相关资源并且直接拿来使用。

---------------------------------------------------------------------------

http://blog.csdn.net/arui319

《Android应用开发精解》已出版,本文是初稿的部分内容。欢迎购买阅读。

本文可以转载,但是请保留以上作者信息。

谢谢。

---------------------------------------------------------------------------

本文转载自:http://blog.csdn.net/arui319/article/details/8549849

共有 人打赏支持
KingMing
粉丝 6
博文 33
码字总数 3989
作品 0
厦门
私信 提问
Android四款系统架构工具

Spring for Android   Spring for Android是Spring框架在Android平台上的扩展,旨在简化Android原生应用的开发流程,提高开发者的工作效率。Spring for Android可以帮助开发者简化应用与服...

zhwj407906450
2014/10/21
0
0
全副武装!AndroidUI自动化测试在RxImagePicker中的实践历程

如果您不是很了解Android的自动化测试,或者还不了解UI自动化测试对于Android开发者的意义,请参考笔者的文章《解放双手,Android开发应该尝试的UI自动化测试(将于近期发布)》。概述 我是却...

却把清梅嗅2
08/02
0
0
为保证交易体验,招行选择快速适配做最新一“派”

Android 系统仍在不断进化。 随着人们对数码产品更大显示占比需求的高涨,手机全面屏时代已经不可阻挡地到来,面对各式各样的异形屏,应用开发者们似乎多了不少 “额外任务”。 在种类繁多的...

Android_开发者
11/05
0
0
Android零基础入门第84节:引入Fragment原来是这么回事

随着大众生活水平的提高,再加上移动互联网的迅速发展,几乎每个人都至少拥有一台搭载Android系统的移动设备。Android设备的多样性给我们带来了很大的便捷,各Android设备拥有不同分辨率和不...

鑫鱻
2017/10/26
0
0
Android开发优化之——对界面UI的优化(2)

在一个应用程序中,一般都会存在多个Activity,每个Activity对应着一个UI布局文件。一般来说,为了保持不同窗口之间的风格统一,在这些UI布局文件中,几乎肯定会用到很多相同的布局。如果我们...

KingMing
2015/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMQ+PHP 教程三(Publish/Subscribe)用yii2测试通过

介绍 在前面的教程中,我们创建了一个工作队列。工作队列背后的假设是每个任务都交付给一个工作人员处理。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者发送消息。此模式...

hansonwong
25分钟前
2
0
关于JAVA你必须知道的那些事(四):单例模式和多态

好吧,今天一定要把面向对象的最后一个特性:多态,给说完。不过我们先来聊一聊设计模式,因为它很重要。 设计模式 官方的解释是,设计模式是:一套被反复使用,多数人知晓的,经过分类编目,...

拾光TM
25分钟前
1
0
ES6 系列之 Babel 是如何编译 Class 的(下)

摘要: ## 前言 在上一篇 [《 ES6 系列 Babel 是如何编译 Class 的(上)》](https://github.com/mqyqingfeng/Blog/issues/105),我们知道了 Babel 是如何编译 Class 的,这篇我们学习 Babel ...

阿里云官方博客
26分钟前
1
0
附实例!实现iframe父窗体与子窗体的通信

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息。同时本...

腾讯云加社区
32分钟前
1
0
JSP页面传List集合到Action中

1:JSP页面(前端用的是H-UI框架) <div class="codeView docs-example"> <table class="table table-border table-bordered table-striped"> <thead> ......

uug
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部