UI的适配
1. 多语言的适配
实现效果:app中肯定会显示很多文字,自动根据当前设备的语言环境显示对应国家的文字
实现方式:
1)在res文件中创建带后缀名的values文件夹,后缀名为国家缩写
如values-ko-rKR 代表韩国
2)将原有的values文件夹中的strings.xml文件复制粘贴到新建文件夹中,
3) 将新建文件夹中的strings.xml文件中的文字修改为对应国家的语言即可
4 )确保所有控制显示的文字的部分都是通过引用strings中的资源文件实现
2. 屏幕的适配
实现的效果: 可以实现让同一款app,安装在多款手机上时,不管屏幕大小如何,始终显示基本相同的效果
与屏幕相关的重要概念
屏幕尺寸
概念:屏幕尺寸是指屏幕对角线的长度(单位:英寸,1英寸=2.54厘米)
Android设备的屏幕尺寸通常划分为以下几种:small, normal, large, and extra-large
屏幕尺寸和屏幕密度与限定符之间的关系图
屏幕像素密度
概念:屏幕像素密度是指每英寸上的像素点数
1英寸中存在多少像素,屏幕密度就为多少
像素密度的单位:dpi (dots per inch)
计算dpi公式:dpi = sqrt(w*w+h*h)/size
Android设备的屏幕像素密度通常划分为以下几种: low, medium, high, extra-high, extra-extra-high, and extra-extra-extra-high
xxxhdpi (extra-extra-extra-high) ~640dpi
xxhdpi (extra-extra-high) ~480dpi
xhdpi (extra-high) ~320dpi
hdpi (high) ~240dpi
mdpi (medium) ~160dpi
ldpi (low) ~120dpi
屏幕测量工具:DisplayMetrics类
获取手机屏幕密度:Context.getResources().getDisplayMetrics().desentyDpi
获取手机屏幕的密度系数:Context.getResources().getDisplayMetrics().desenty
屏幕方向 横向 land
竖向 port
屏幕分辨率
概念:屏幕分辨率是指在横纵向上的像素点数(单位:px,1px=1个像素点)
常见的分辨率
实现屏幕适配的方式:
1. 使用"wrap_content" and "match_parent"或者weight控件控件的宽高,最好不要用固定大小(200px,200dp)
2. 一旦一定要设置固定大小时:
使用单位:dp、sp,避免使用px
dp(density independent pixel):密度独立像素,也可写为dip
sp:(scale pixel):像素比例,一般用于字体大小
dp转px的方式 = dp * (dpi / 160)
px转dp或sp等单位的方式:单位换算工具类:TypedValue
TypedValue.applyDimension(int unit, float value, DisplayMetrics metrics)
参数1:unit,长度的单位
TypedValue.COMPLEX_UNIT_DIP
TypedValue.COMPLEX_UNIT_SP
TypedValue.COMPLEX_UNIT_PX
参数2:value,长度的值
参数3:metrics,屏幕测量工具
3. 使用RelativeLayout 布局设计复杂的UI界面,禁用绝对布局
4. 使用对应的限定符实现资源文件的自动获取:
注意:
1) 使用的限定符均为上方缩写的尺寸,密度等的关键字名称,如small,xhdpi
2) 确保多个不同后缀的资源文件中,资源名称是一致的
补充内容:
1) 在代码中获取当前屏幕方向:
/*
* 判断屏幕方向:
* getResources().getConfiguration().orientation
* 返回值即为当前的屏幕方向
* */
int ori = getResources().getConfiguration().orientation;
switch (ori) {
case Configuration.ORIENTATION_LANDSCAPE: //横屏
Toast.makeText(MainActivity.this, "横屏button被点击!!", Toast.LENGTH_SHORT).show();
break;
case Configuration.ORIENTATION_PORTRAIT: //竖屏
Toast.makeText(MainActivity.this, "竖屏button被点击!!", Toast.LENGTH_SHORT).show();
break;
·2)在添加后缀名时,也可以直接添加n*n的分辨率
如:layout-1280x720, 注意:大数字放前
或者 layout-port-1280x720 综合显示屏幕分辨率与屏幕方向
5. 使用多套图片
在进行开发的时候,我们需要把合适大小的图片放在合适的文件夹里面
以图标设计为例
ldpi: 0.75 -- 75*75
mdpi: 1.0 (baseline) -- 100*100
hdpi: 1.5 -- 150*150
xhdpi: 2.0 --200*200
xxhdpi: 3.0 --300*300
xxxhdpi: 4.0 -- 400*400
6. 处理9patch图片(.9.png图片)
作用:可以指定图片在放大的时候,只放大图片的某一部分
处理方式:
1) 打开安装环境中sdk\tools文件夹,找到该文件夹中draw9patch.bat文件双击运行
会弹出一个类似于下方的工具窗口“
2) 直接将想要处理的图片拖拽到当前窗口中,拖拽后展示如下窗口:
左边是处理工具部分,右边是预览效果部分
3) 在上下左右四个方向,去添加黑色的线条,被左右黑色线条包裹起来区域控制的就是进行上下伸缩的时候图片伸缩的区域。被上下黑色线条包裹起来的区域控制的就是进行左右伸缩图片时图片的伸缩区域
4)选择左上角的File按钮—save File,将保存好的图片放到工程的drawable文件夹内即可
5)在通过@drawable进行图片引用时直接使用.9.png前面的名字即可
7. 在android6.0之后出现了一个新的布局对象---百分比布局,
相关类
PercentRelativeLayout
PercentFrameLayout
通过名字就可以看出,这是继承自FrameLayout和RelativeLayout两个容器类
特点:该类中添加了一些自定义的属性,这些属性主要用于控制某控件的宽高或者左间距等属性值的设置,可以直接设置为占据屏幕的百分之多少
使用方式:
1. 如果拥有6.0以上的sdk,直接将此类拿来用即可,与使用普通的布局对象是一样的
2. 如果没有6.0以上的sdk,使用步骤如下:
1) 需要准备lib-percent工程,此工程中存储的是百分比布局的相关代码
2) 将该工程导入到当前workspace中,
注:在导入时记得选择copy
3. 引用lib-percent工程:
在需要引用的工程名处右键—properties---Android----Add---在弹出的窗口中选择lib-percent工程后OK即可
4. 就可使用百分比布局中的相关代码了