Android 屏幕适配
来源:互联网 发布:宾馆收费系统源码 编辑:程序博客网 时间:2024/06/08 13:50
android屏幕适配的整体思路
- 开发前,选取一款主流屏幕进行开发,比如现在的1280*720;
- 开发过程中,遵循一些原则:不用AbsoluteLayout(绝对布局), 多用相对布局&线性布局(权重), 要用dp,不用px
dp和px的关系:dp = px/设备密度
320*480的设备密度为1.0, 480*800的设备密度为1.5, 1280*720的设备密度为2.0。
// 获取设备密度
float density = getResources().getDisplayMetrics().density;
System.out.println("设备密度:" + density);- 开发后期,再在不同的屏幕上测试(480*800 、1920*1080)。
具体主要有如下几种适配
- 图片适配(不是很常用)
- 在不同的drawable文件夹下,放置几套不同大小的图片。
- 缺点:会导致apk体积过大。
- 如果图片非常重要,比如app的logo,这时可以在不同的drawable下放置几张不同大小的logo图片
- 布局适配(不是很常用)
- 在res目录下,创建不同布局的layout文件夹。比如要适配480*800的屏幕,就建立layout-800x480的文件夹
- 缺点:不利于后期维护,一旦布局需要改动一丁点,将是一个浩大的工程。
- 尺寸适配(很常用)
- 在res目录下,创建不同的values文件夹。比如要适配1280*720的屏幕,就建立values-1280x720文件夹,在该文件夹下,创建dimens.xml文件,在文件里面设置尺寸。
- 权重适配(很常用)
- android:weightSum=”3” android:weight=”1”
- 在要平均分配屏幕宽度或高度时常用权重,比如一般app的底部标签的布局。
- 代码适配
- int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight(); - 拿到屏幕的宽高,就可以进行相关适配了。
- int width = getWindowManager().getDefaultDisplay().getWidth();
屏幕适配的工具类
public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue * @param scale * (DisplayMetrics类中属性density) * @return */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 将dip或dp值转换为px值,保证尺寸大小不变 * * @param dipValue * @param scale * (DisplayMetrics类中属性density) * @return */ public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } /** * 将px值转换为sp值,保证文字大小不变 * * @param pxValue * @param fontScale * (DisplayMetrics类中属性scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 将sp值转换为px值,保证文字大小不变 * * @param spValue * @param fontScale * (DisplayMetrics类中属性scaledDensity) * @return */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } }
0 0
- 【Android】屏幕适配
- android屏幕适配
- android屏幕适配
- android 屏幕适配
- Android屏幕适配
- Android屏幕适配
- Android屏幕适配
- Android屏幕适配
- android 屏幕适配
- Android屏幕适配
- Android屏幕适配
- Android 屏幕适配
- android屏幕适配
- Android屏幕适配
- Android屏幕适配
- Android 屏幕适配
- android屏幕适配
- Android屏幕适配
- 量子通信和量子计算机到底哪个技术是可行的?
- STL常用方法
- eclipse.ini配置eclipse的启动参数
- iOS微信支付开发--cocoachina muxiang
- 大处着眼,小处着手
- Android 屏幕适配
- redis介绍及常用命令
- ios7 uitableview内容视图下移 20px bug
- SVM
- ISO8583报文128个域说明
- JavaScript 经典实例收集整理
- 使用Adt自带的工具进行Android自动化测试(三)
- linux命令学习(每天都会更新)
- SVM常用核函数