Android 高效布局的几点建议

同步发布在:http://snowdream.github.io/blog/2016/03/16/android-effective-layout/

在Android应用开发过程中,布局是一项最基础的工作。
如何进行高效布局,提高开发效率呢? 我经过长期实践,总结了以下几条建议:

一、 静态布局为主,动态布局为辅

  1. 静态布局

就是我们最常用的,通过xml来进行布局。

优点:所见即所得。布局创建,修改,预览都非常的方便。
缺点:灵活性稍差。

  1. 动态布局

    通过Java代码来实现布局。

优点:灵活性好。在应用运行过程中,可以随时去调整布局,例如:增加未加载的新控件,调整控件的位置等。
缺点:可见性差,维护非常的繁琐。

大家都知道,一个项目,一个功能,不可能自始至终都是同一个人进行维护的。人员流动,工作调整,这些都可能造成以下结果:你去接手别人维护的功能/模块,别人接手你维护的功能/模块。基于这种现状,在Android应用布局方面,可见性,可维护性显得尤为重要。 因此,我推荐的布局原则是:“静态布局为主,动态布局为辅。”

推荐的理由有两点:
1. 布局是一个相对持续的过程。可能UI/UE会随时让你调整下控件之间的间距,位置等。动态布局,需要每次修改后,编译运行在手机上才能看到实际的效果。而静态布局,可以随时修改,随时预览效果。
1. 静态布局,你可以通过阅读xml,预览效果,对于整个界面,可以快速的熟悉和掌握。而对于动态布局,你必须确认你对所有有关的代码熟悉后,静态布局和动态布局相结合,在脑海中对整个界面进行拼接,才能有一个整体把握。而随着布局变得复杂,这将变得越来越难。

二、 善用tools工具

有些布局,预览效果非常差。咋一看上去,一片空白。这样其实丧失了静态布局的一大优点“所见即所得。”整个布局之后,你编译运行到手机上,才能看到你设置的属性,间距等是否正常生效了。

这里,我推荐一个原则:“尽量在布局中展示你要的效果。”
怎么实现呢?这里需要用到一个工具,tools。

Tools 简介和用法

Tools工具的使用仅仅针对IDE有效,并不会被打包进应用。

具体步骤如下:
1. 在布局最外层,加上下面这句话,声明一下。

xmlns:tools="http://schemas.android.com/tools"
  1. 一般的控件属性以“android:”开头。新增一个同样的属性,改为以“tools:”开头。

例如:一个TextView控件,需要设置默认状态为不可见。

<TextView
            android:text="Name"
            android:visiblity="gone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

但是你想预览它,又担心改为android:visiblity="visible"之后忘了改回来,直接提交了。现在你不必担心,新增一个同样名称的属性,以“tools:”开头,就可以了。

<TextView
            android:text="Name"
            android:visiblity="gone"
            tools:visiblity="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

三、 时刻谨记UI适配

由于Android开源的特性,造成Android手机种类繁多。这些手机拥有不同版本的系统,不同的屏幕分辩率,不同的配置等。
我们在进行布局的时候,要时刻谨记UI适配,尽最大限度去适配不同的分辨率。
这里,我总结几点经验:
1. Android控件,默认会带有一点padding。 有些背景切图,可能会留有较大的余白。而UI/UE的标注图可能并没有考虑这些因素,因此,UI/UE的标注图仅供参考。实际布局过程中,可能需要稍微调整。
1. 保留重要标注尺寸,忽略次要标注尺寸。举个简单的例子。假设一个顶部区域,固定高度。需要放置主标题,副标题两个文本控件。 建议这么布局,主标题和副标题使用一个竖直的LinearLayout进行包裹。主标题和副标题控件之间按照标注图设置精准的间距。之后,把整个LinearLayout竖直居中在顶部区域。
1. 设置android:weight,来进行按照比例布局。
1. 文本控件,需要考虑,文本过长时的省略策略。
1. 防止控件相互压盖
1. 切图至少提供两套,hdpi和xhdpi

参考

  1. Designtime Layout Attributes
  2. Tools Attributes
时间: 2024-11-02 00:11:12

Android 高效布局的几点建议的相关文章

Android布局技巧之创建高效布局_Android

Android UI工具包提供了一些布局管理器,它们使用起来相当容易,而且,大多数的时候,你只需要使用它们最基本的特征来实现UI. 执着于基本特征的使用对于创建UI来说,往往不是最高效的.一个常见的例子就是滥用LinearLayout,它将会导致View树中的View数量激增.View--更糟的是,布局管理器--添加到应用程序里都会带来一定的消耗:初始化,布局和绘制变得更加缓慢.嵌套布局的花销尤其"昂贵",例如,如果你嵌套了一些LinearLayout,并使用了weight参数,这会导

Android 项目中使用 的 优化建议

下面是开始Android编程的好方法:  找一些与你想做事情类似的代码  调整它,尝试让它做你像做的事情  经历问题  使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激励你,因为你在保持不断迭代,不经意中你学到了很多.然而,当你发布应用时你还要做一些更深入的事情. 从一些可正常工作的代码到一个可怕的应用程序是一个巨大的跳跃,相比iOS平台Android更是如此 .当在iOS上发布应用时只是在一个设备上跳跃–你的手机–对很多设备而言都很相似–同样大小的屏幕,

android技巧:android xml布局总结

一.背景 可能很多人跟我一样,做了好久的android程序,却一直没有认真地坐下来好好学习下xml文件的布局.其实有的时候我们用view绘制或是利用ADT的图形界面功能就可以轻松搞定布局,但是最好还是静下来学习下xml的布局文件具体写法.这一节我们要绘制如下图所示的界面. 二基础知识 首先我们要了解android到底有那些布局,和每个布局类型的区别. 1.线性布局 LinearLayout 线性布局分两种.一种是水平布局,一种是垂直布局.下面我们根据上图举例子. 先把上图的代码贴出来吧! <?x

android动态布局之动态加入TextView和ListView的方法

  本文实例讲述了android动态布局之动态加入TextView和ListView的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6

Android开屏布局-加载广告图片和倒计时的布局

  一个android开屏布局,用于加载广告图片和倒计时的布局,设置LayoutParams,划分额外空间比例为6分之5(具体权重比例可根据自己需求自定义),异步加载广告图片,相关的Android代码,有兴趣的参考:

android 嵌套布局出现width问题 不知n道什么原因

问题描述 android 嵌套布局出现width问题 不知n道什么原因 Attribute "android:layout_width" was already specified for element "RelativeLayout". 解决方案 同一个RelativeLayout中定义了2遍android:layout_width 解决方案二: 我也是醉了-------- 解决方案三: 感觉提示不是很明显嘛,你好好看看,还不是多写了 解决方案四: 你写了两遍a

Android编程布局(Layout)之AbsoluteLayout用法实例分析_Android

本文实例讲述了Android编程布局(Layout)之AbsoluteLayout用法.分享给大家供大家参考,具体如下: AbsoluteLayout,顾名思义,就是绝对位置的布局:也可以叫做坐标布局,也就是指定元素的绝对位置(或者叫绝对坐标值).这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差. <?xml version = "1.0" encoding = "utf-8"?> <AbsoluteLayo

Android编程布局控件之AbsoluteLayout用法实例分析_Android

本文实例讲述了Android编程布局控件之AbsoluteLayout用法.分享给大家供大家参考,具体如下: AbsoluteLayout是绝对布局管理器,指的是指定组件的左上角绝对坐标来指定组件的布局 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"

ontochevent事件冲突-Android 自定义布局和自定义view的onTochEvent时间冲突

问题描述 Android 自定义布局和自定义view的onTochEvent时间冲突 我自定义了一个布局和一个view,自定义view被布局引用.view和布局都重写了他的onTochEvent方法,然后发现布局的onTochEvent方法无法被执行被view的onTochEvent 拦截了,请问怎么解决. 解决方案 使自定义view来拦截touch事件即可 onInterceptTouchEvent 解决方案二: 刚好最近写了一篇关于View事件冲突的文章,你看看http://blog.csd