欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发XML布局文件规范及建议

程序员文章站 2022-11-01 17:13:26
1建议和案例1.1扁平化布局解释:在Android加载XML布局文件,创建View或者ViewGroup的时候,XML文件的布局的深度和广度都会对这个过程造成影响。因此XML文件布局的深度和广度都会使创建View的过程更加的耗时,尤其是在布局文件多层嵌套的情况下,因此我们在进行布局的时候,应该尽量考虑使用扁平化的结构(而不是过多的一层套一层),减少布局的深度和复杂性。建议1:能实现需求的前提下尽可能使用RelativeLayout代替LinearLayout。常见情况下我们会使用LinearLay...

1 建议和案例

1.1 扁平化布局

解释:在Android加载XML布局文件,创建View或者ViewGroup的时候,XML文件的布局的深度和广度都会对这个过程造成影响。因此XML文件布局的深度和广度都会使创建View的过程更加的耗时,尤其是在布局文件多层嵌套的情况下,因此我们在进行布局的时候,应该尽量考虑使用扁平化的结构(而不是过多的一层套一层),减少布局的深度和复杂性。
建议1:能实现需求的前提下尽可能使用RelativeLayout代替LinearLayout。常见情况下我们会使用LinearLayout和RelativeLayout以及FrameLayout。LinearLayout需要多次进行测量布局操作,才能获取到正确的信息。RelativeLayout可以更加方便地实现一些LinearLayout需要进行嵌套才能实现的一些布局,这样对于实现布局的扁平化有更好的效果。案例:待补充
建议2:尽可能减少布局中不必要的控件的使用,以达到精简布局的效果。例如通过为TextView设置图片,来替换ImageView与TextView的组合,实现同样的效果,而这样只使用了一个控件。例如使用HTML标签优化TextView显示。例如Android Spannable的使用等等。一句话,能使用一个简单控件实现的需求就尽可能不要使用多个。案例:待补充

1.2 Include标签的使用

解释:在应用的多个界面中,经常会有几个界面存在相同或者类似的部分,例如标题栏,导航栏之类的。这些重复的界面如果一一写下来,既浪费时间精力,又不方便统一管理,例如需要改动的时候,在这种情况下,可以把这个重复的界面布局独立出来,然后通过include标签,将这个布局导入需要引用的地方,这样就可以只维护这个独立出来的布局文件即可。
建议3:布局很复杂的时候可以将功能独立的部分使用include标签。
案例:使用include标签来写标题栏
Android开发XML布局文件规范及建议Android开发XML布局文件规范及建议
注意:可以复写所有layout属性(任何android:layout_*属性),但是必须同时复写layout_width和 layout_height属性,这些复写的layout属性才会生效。可以在include标签中给这个布局定义一个id,这样将会覆盖其独立布局文件中的id值。

1.3 merge标签的使用

解释:merge标签可以用来代替布局文件中的根节点,例如LinearLayout,RelativeLayout,FrameLayout等元素。配合include标签,可以减少布局的嵌套。
建议4:使用merge标签来减少不必要的嵌套。
案例:include和merge配合使用Android开发XML布局文件规范及建议
在使用include标签将上面布局复用的时候,会直接将两个Button放在include标签的位置,而不会使用其他容器来包装这两个button。

1.4 ViewStub的使用

解释:在实际应用中,可能存在一部分界面是处于隐藏状态的,在一定的条件下,才会展示出来。我们一般会将这部分节目使用setVisibility(View.GONE)方法将其隐藏起来,但是我们更推荐使用ViewStub来达到相同的目的。因为ViewStub是一个处于不可见状态的View,初始状态时不会被加载出来,不会浪费资源,而处于View.GONE状态的View也是需要被加载的。ViewStub的使用方法类似include标签,需要在其中声明需要加载的布局文件。
建议5:在一定条件才会展示出来的一部分界面可使用ViewStub。
案例:播放详情页全屏界面使用ViewStub来实现各个模块界面。
Android开发XML布局文件规范及建议
在需要加载ViewStub这部分布局的时候,可以通过两种方式实现加载:
a) 通过setVisibility(View.VISIBLE)的方式,这时候可以通过判断其可见性来得知其是否已经加载。
b) 通过inflate方法来实现加载。注意此时无法通过判断可见性来判断是否已经加载了,可以通过判断其中的元素是否存在来判断加载情况。

1.5 自定义View的使用

解释:当界面中某块布局比较复杂但又比较独立,这时我们就可以考虑将其封装成具体的自定义View。
建议6:适当的使用自定义View。案例:全屏播放的错误页面
Android开发XML布局文件规范及建议

1.6 Hierarchy Viewer工具

待补充

1.7 过度绘制检测

解释:屏幕上某一像素点在一帧中被重复绘制多次
分类(根据层度):
无过度绘制(一个像素只被绘制了一次) (原色)
过度绘制x1(一个像素被绘制了两次) (蓝色)
过度绘制x2(一个像素被绘制了三次) (绿色)
过度绘制x3(一个像素被绘制了四次) (粉色)
过度绘制x4+(一个像素被绘制了五次以上) (红色)
建议7:尽可能避免出现过度绘制。
案例:adb shell setprop debug.hwui.overdraw show
adb shell setprop debug.hwui.overdraw false

1.8 ConstaintLayout的使用

待补充

2 规范

2.1 图片资源文件(drawable\和mipmap\)

res/drawable/ 目录下放的是位图文件(.png、.9.png、.jpg、.gif)或编译为可绘制对象资源子类型的 XML 文件,而 res/mipmap/ 目录下放的是不同密度的启动图标,所以 res/mipmap/ 只用于存放启动图标,其余图片资源文件都应该放到 res/drawable/ 目录下。
命名规则:类型{_模块名}_逻辑名称、类型{_模块名}_颜色。
说明:{} 中的内容为可选;类型 可以是可绘制对象资源类型,也可以是控件类型(具体见附录UI 控件缩写表)。例如:Android开发XML布局文件规范及建议

2.2 布局资源文件(layout\)

命名规则:类型_模块名、类型{_模块名}_逻辑名称。说明:{} 中的内容为可选。例如:Android开发XML布局文件规范及建议

2.3 动画资源文件(anim/ 和 animator/)

安卓主要包含属性动画和视图动画,其视图动画包括补间动画和逐帧动画。属性动画文件需要放在 res/animator/ 目录下,视图动画文件需放在 res/anim/ 目录下。
命名规则:{模块名_}逻辑名称。说明:{} 中的内容为可选,逻辑名称 可由多个单词加下划线组成。
例如:refresh_progress.xml、market_cart_add.xml、market_cart_remove.xml。
如果是普通的补间动画或者属性动画,可采用:动画类型_方向 的命名方式。例如:
Android开发XML布局文件规范及建议

2.4 values 资源文件(values/)

values/ 资源文件下的文件都以 s 结尾,如 attrs.xml、colors.xml、dimens.xml,起作用的不是文件名称,而是 标签下的各种标签,比如 style决定样式, 决定颜色,所以,可以把一个大的 xml 文件分割成多个小的文件,比如可以有多个 style 文件,如 styles.xml、styles_home.xml、styles_item_details.xml、styles_forms.xml。
注意:布局文件中如果要设置大小、颜色、字符串等禁止在布局文件中写死,而要在values/资源文件下定义对应的值。
a) colors.xml。
的 name 命名使用下划线命名法,在你的 colors.xml 文件中应该只是映射颜色的名称一个 ARGB 值,而没有其它的。不要使用它为不同的按钮来定义 ARGB 值。例如,不要像下面这样做:Android开发XML布局文件规范及建议
使用这种格式,会非常容易重复定义 ARGB 值,而且如果应用要改变基色的话会非常困难。同时,这些定义是跟一些环境关联起来的,如 button 或者 comment,应该放到一个按钮风格中,而不是在 colors.xml 文件中。相反,应该这样做:
Android开发XML布局文件规范及建议
b) dimens.xml
像对待 colors.xml 一样对待 dimens.xml 文件,与定义颜色调色板一样,你同时也应该定义一个空隙间隔和字体大小的“调色板”。 一个好的例子,如下所示:
Android开发XML布局文件规范及建议
布局时在写 margins 和 paddings 时,你应该使用 spacing_xx 尺寸格式来布局,而不是像对待 string 字符串一样直接写值,像这样规范的尺寸很容易修改或重构,会使应用所有用到的尺寸一目了然。 这样写会非常有感觉,会使组织和改变风格或布局非常容易。
c) strings.xml
的 name 命名使用下划线命名法,采用以下规则:{模块名_}逻辑名称,这样方便同一个界面的所有 string 都放到一起,方便查找。
Android开发XML布局文件规范及建议
d) styles.xml
style 的 name 命名使用大驼峰命名法,几乎每个项目都需要适当的使用 styles.xml 文件,因为对于一个视图来说,有一个重复的外观是很常见的,将所有的外观细节属性(colors、padding、font)放在 styles.xml 文件中。 在应用中对于大多数文本内容,最起码你应该有一个通用的 styles.xml 文件,例如:
Android开发XML布局文件规范及建议

3 附录

3.1 Xml配置参数大全

• 第一类:属性值为true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
• 第二类:属性值必须为id的引用名
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
• 第三类:属性值为具体的像素值,如30dip,40px
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
EditText的android:hint 设置EditText为空时输入框内的提示信息。
android:gravity 
android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右
android:layout_gravity
android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity="right"则button靠右
android:scaleType:
android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别:
CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示
MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。
** 要注意一点,Drawable文件夹里面的图片命名是不能大写的。


android:id 为控件指定相应的ID
android:text 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串
android:gravity 指定View组件的对齐方式,比如说居中,居右等位置 这里指的是控件中的文本位置并不是控件本身
android:layout_gravity 指定Container组件的对齐方式.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为 例,android:layout_gravity="right"则button靠右
android:textSize 指定控件当中字体的大小
android:background 指定该控件所使用的背景色,RGB命名法
android:width 指定控件的宽度
android:height 指定控件的高度
android:layout_width 指定Container组件的宽度
android:layout_height 指定Container组件的高度
android:layout_weight View中很重要的属性,按比例划分空间
android:padding* 指定控件的内边距,也就是说控件当中的内容
android:sigleLine 如果设置为真的话,则控件的内容在同一行中进行显示
android:scaleType 是控制图片如何resized/moved来匹对ImageView的siz
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
android:paddingLeft 本元素内容离本元素右边缘的距离
android:paddingRight 本元素内容离本元素上边缘的距离
android:hint 设置EditText为空时输入框内的提示信息
android:LinearLayout 它确定了LinearLayout的方向,其值可以为vertical,表示垂直布局horizontal, 表示水平布局


android:interpolator
可能有很多人不理解它的用法,文档里说的也不太清楚,其实很简单,看下面:interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用 Interpolator 控制。interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:
AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时侯加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始减速
LinearInterpolator 在动画的以均匀的速率改变
对于 LinearInterpolator ,变化率是个常数,即 f (x) = x.
public float getInterpolation(float input) {
return input;
}
Interpolator其他的几个子类,也都是按照特定的算法,实现了对变化率。还可以定义自己的 Interpolator 子类,实现抛物线、*落体等物理效果

3.2 UI控件缩小表

Android开发XML布局文件规范及建议

3.3 常见英文单词缩小表

Android开发XML布局文件规范及建议

本文地址:https://blog.csdn.net/o1a2s3/article/details/112511225

相关标签: 原创 android

上一篇: 把马给吃了

下一篇: 你咋这么实在