最近正在做Android的UI设计,故搜集了一些Android上进行UI设计的一些资料,现和各位分享下。

首先说说density,density值表示每英寸有多少个显示点,与分辨率是两个不同的概念。

Android主要有以下几种屏:

QVGA和WQVGA屏density=120;

HVGA屏density=160;

WVGA屏density=240;

下面以480dip*800dip的WVGA(density=240)为例,详细列出不同density下屏幕分辨率信息:

当density=120时 屏幕实际分辨率为240px*400px (两个点对应一个分辨率)
状态栏和标题栏高各19px或者25dip
横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip
竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip

density=160时 屏幕实际分辨率为320px*533px (3个点对应两个分辨率)
状态栏和标题栏高个25px或者25dip
横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip
竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip

density=240时 屏幕实际分辨率为480px*800px (一个点对于一个分辨率)
状态栏和标题栏高个38px或者25dip
横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip
竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip

apk的资源包中,当屏幕density=240时使用hdpi标签的资源
当屏幕density=160时,使用mdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源。
不加任何标签的资源是各种分辨率情况下共用的。
建议:布局时尽量使用单位dip,少使用px。

device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。


import android.content.Context;import android.util.DisplayMetrics;/** * 计算公式 pixels = dips * (density / 160) *  * @version 1.0.1 2010-12-11 *  * @author */public class DensityUtil {private static final String TAG = DensityUtil.class.getSimpleName();// 当前屏幕的densityDpiprivate static float dmDensityDpi = 0.0f;private static DisplayMetrics dm;private static float scale = 0.0f;/** *  * 根据构造函数获得当前手机的屏幕系数 *  * */public DensityUtil(Context context) {// 获取当前屏幕dm = new DisplayMetrics();dm = context.getApplicationContext().getResources().getDisplayMetrics();// 设置DensityDpisetDmDensityDpi(dm.densityDpi);// 密度因子scale = getDmDensityDpi() / 160;Logger.i(TAG, toString());}/** * 当前屏幕的density因子 *  * @param DmDensity * @retrun DmDensity Getter * */public static float getDmDensityDpi() {return dmDensityDpi;}/** * 当前屏幕的density因子 *  * @param DmDensity * @retrun DmDensity Setter * */public static void setDmDensityDpi(float dmDensityDpi) {DensityUtil.dmDensityDpi = dmDensityDpi;}/** * 密度转换像素 * */public static int dip2px(float dipValue) {return (int) (dipValue * scale + 0.5f);}/** * 像素转换密度 * */public int px2dip(float pxValue) {return (int) (pxValue / scale + 0.5f);}@Overridepublic String toString() {return " dmDensityDpi:" + dmDensityDpi;}}


更多相关文章

  1. 最新!!Android(安卓)状态栏详细开发,5分钟精通状态栏
  2. 关于Android的一些设计
  3. 【摘录】android 屏幕分辨率问题
  4. android 线性布局几个属性
  5. Android(安卓)实现自适应正方形GridView
  6. android区分pad还是phone设备
  7. 关于Android的一些设计
  8. android zxing生成二维码
  9. Android(安卓)自定义dialog 设置宽度

随机推荐

  1. Android 可随意拖动的悬浮窗体
  2. Android(安卓)Tomcal SSL Https 单向篇
  3. android连续按两次返回退出程序(完整代码)
  4. ART崛起 Android 5.0将不再支持Dalvik
  5. KBinding 使用kotlin实现的Android MVVM
  6. IJKPlayer/FFMPEG 4 Android
  7. Android Socket(TCP/IP) 通信
  8. Android中Socket通讯类
  9. 如何获取android root 启动权限
  10. 转载:[Android] Development FAQ