设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

对 Android 开发者有益的 40 条优化建议

2013-9-16 10:33| 发布者: 红黑魂| 查看: 2242| 评论: 0|来自: 开源中国编译

摘要: 下面是开始Android编程的好方法:找一些与你想做事情类似的代码调整它,尝试让它做你像做的事情经历问题使用StackOverflow解决问题对每个你像添加的特征重复上述过程。这种方法能够激励你,因为你在保持不断迭代,不 ...

下面是开始Android编程的好方法:

  • 找一些与你想做事情类似的代码
  • 调整它,尝试让它做你像做的事情
  • 经历问题
  • 使用StackOverflow解决问题

对每个你像添加的特征重复上述过程。这种方法能够激励你,因为你在保持不断迭代,不经意中你学到了很多。然而,当你发布应用时你还要做一些更深入的事情。

从一些可正常工作的代码到一个可怕的应用程序是一个巨大的跳跃,相比iOS平台Android更是如此 。当在iOS上发布应用时只是在一个设备上跳跃–你的手机–对很多设备而言都很相似–同样大小的屏幕,都有很好的硬件,95%上运行相同版本的操作系统。在Android应用中你不会遇到这种情况。

你的程序必须能够处理一切:从屏幕,处理器,定制的操作系统,API层级以及任何其他的特定设备。

这是我对使Android应用舒服起来的个人建议。

目标屏幕尺寸及解决方法

在Android世界里目前有超过100种的不同屏幕尺寸,但解决方法也很丰富。为使你的应用适应不同的屏幕配置有两件事情你需要确定:

  1. 你对不同的屏幕尺寸有一个好的布局和结构
  2. 你的图像在不同分辨率下工作良好
这些都是独立的任务,你可能有一个超级的tablet布局,但上面的图形看起来很糟糕。我们会依次讨论他们。

为不同的屏幕而设计

1.通常会用ScrollView 和 ListView 轻松搞定

当我们有一系列不同尺寸的大屏手机时,它们之间最大的不同就是屏幕的高度。因此ScrollView和ListView通常可是有效的工作,虽然有时它们并不能完全覆盖全部屏幕。在OpenSignal中的 Dashboard标签下我们可以看到所有部件一气呵成,不存在滑动、对于许多高级类型标签中,滑动展示并不见得是一件坏事。如果你能够为你所有的设计匹配到各种屏幕上面去,那么最好不过。否则,这两个控件会让你用最小的开发代价来保证你的软件在大多数屏幕上正常展示。

opensignal_dashboard1

Dashboard style 的设计不需要scroll

2: 使用文件夹. Android 的资源文件夹结构非常强大, 它允许开发者将不同的图片、字符串、布局文件、外形、颜色这些资源,在api、代码、屏幕尺寸等部分. 下面是一个例子,展示了在资源文件夹下你可以怎样做:


 

Screen Shot 2013-07-29 at 10.32.18

在 values-small 文件夹中存放了一个 bools.xml 文件, 文件中有如下几行代码:

<resources><bool name="small_screen">true</bool></resources>

 

在代码中我可这样引用:

if(getResources().getBoolean(R.bool.small_screen)){getSupportActionBar().hide();}

 

在小尺寸设备中boolean值将置为true 我此时将因此ActionBar来节省空间. 这段代码正是非凡的ActionBarSherlock 扩展库中的一部分,稍后再详细介绍. 在values-sw360dp文件夹中,存放对应屏幕宽于360dp的资源文件。与上面相同的位置,有如下代码

<resources><bool name="small_screen">false</bool></resources>

 

对于大屏幕而言,ActionBar就置为了显示状态.

我不需要将 bools.xml 文件放入 values-sw400dp文件夹中, 因为操作系统会自动按相应路径搜索. 例如一个设备宽 600dp (600/160=3.75 英寸, 这就是我们通常所说的7片装) 操作系统会在values-sw600dp 和其包含的的文件夹中搜索 bools.xml 文件, 若没有找到则搜索 values-sw400dp 文件夹,在搜索 values-sw360dp 文件夹以此类推.

 

建议3:160dp = 1英寸。320 dp = 2英寸。dp = dip
建议4:你可以用这些目录结构技巧来应付所有资源类型,比如你的XML布局用指定的系统目录名称 

来解决这个问题,如:layout-sw360dp目录可以匹配目标宽是360dp的机器。如果你也要支持横竖屏布局切换的话,可以用如下目录:

layout-sw360dp-land

layout-sw360dp-port

别急,你有一半的用户是说阿拉伯语的?那就将布局名称改为下面的样子吧:

layout-sw360dp-land

layout-sw360dp-port

layout-sw360dp-land-ar

layout-sw360dp-port-ar

前两个可以适用于所有语言,-ar代表阿拉伯语。 
建议5:资源规则简介:
XXX //例子:没有添加目录名:默认-适用于Nexus One,Droid 2,S2 
XXX-sw360dp // 比较大的手机 – Galaxy Nexus, S3, S4 
XXX-sw600dp // 7〃 平板 
XXX-sw720dp // 10” 平板 

在Kindle设备有些不同,如下: 
XXX-large-mdpi // kindle fire 7〃 
XXX-large-hdpi // kindle fire 7〃 HD 
 
建议6:如果你不想裁剪所有的布局文件,你可以用dimens.xml文件。你要是留心我上面的文章,你就会注意到在我的values目录里有很多dimens.xml,这样是因为我更喜欢在一个layout.xml里设置值,在每一个布局文件里我喜欢这样做:
<ImageViewandroid:layout_centerHorizontal="true"android:layout_marginTop="@dimen/small_margin"android:layout_width="@dimen/dashBoardWidth"android:layout_height="@dimen/dashBoardHeight"android:id="@+id/dashboard"/>small_margin是在dimen.xml文件里定义的:<resources><dimen name="small_margin">4dp</dimen></resources> 
这个4dp变量在所有dimen文件里。我有个Excel文件,里面创建了所有不同的基于不同因素所需的尺寸定义。也许你会问:为什么不让android OS来处理所有尺寸的问题?为什么不呢,为什么不用一个values目录和一个布局目录来代替所有写死的数值呢?那当然是可以的,如果设置得当,都会得到所有的尺寸,但是对于有些元素看起来就不是那么好计算尺寸了。 
 

建议7:让空白空间大于图像空间。让图像空间大于按钮的大小。如果将按钮,多选框,切换控件放大后是很丑陋的。一个100dip(0.63")大小的按钮是不想在平板上显示为原来两倍宽度200dip(1.25")的.原因是屏幕变大了,这不是说平板是给巨人用的。我们可以这样做,在按钮增加的空间和图片扩展的空间里添加空白。

建议8:用GraphicalLayout工具快速预览。GraphicalLayout是WYSIWG XML编辑器。我喜欢直接编写元素-而不是拖,丢弃的可见编程方式,但在添加一些元素之后,可以在GraphicalLayout的下拉选择菜单里选择不同屏幕尺寸进行测试。 


这里有很多选项供你选择。

图片缩放

建议9:不要把所有的图片都缩放了。用布局文件来适应不同屏幕尺寸的方法只是成功的一半,布局里的元素(如:图片)也要能在高分辨率的屏幕下良好工作。在概念上比较简单的方式就是创建一套完整的图片目录并将它们与很多drawable目录匹配起来。

drawable-sw600dp-ldpi 
drawable-sw600dp-mdpi 
drawable-sw600dp-hdpi 
drawable-sw600dp-xhdpi 
drawable-sw600dp-xxhdpi 
...其它的类似。 

不要这样做: 
你不要太尽信书了。 
一般来说有drawble-ldpi, drawable-hdpi等目录就足够了,不需要将所有的情况都加上。 
 


酷毙
1

雷人

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号