px  就是像素

sp=dpX字体比例(1.25f)

一、dp(或者dip device independent pixels)

一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px。不同设备有不同的显示效果,这个和设备硬件有关。

android里的代码如下:

  1. <span style="font-size: 14px; color: rgb(51, 51, 51);">// 文件位置:android4.0\frameworks\base\core\java\android\util\DisplayMetrics.java
  2. public static final int DENSITY_DEVICE = getDeviceDensity();
  3. public float density;
  4. public void setToDefaults() {
  5. widthPixels = 0;
  6. heightPixels = 0;
  7. density = DENSITY_DEVICE / (float) DENSITY_DEFAULT; // 这里dp用的比例
  8. densityDpi = DENSITY_DEVICE;
  9. scaledDensity = density; // 这是sp用的比例
  10. xdpi = DENSITY_DEVICE;
  11. ydpi = DENSITY_DEVICE;
  12. noncompatWidthPixels = 0;
  13. noncompatHeightPixels = 0;
  14. }
  15. private static int getDeviceDensity() {
  16. // qemu.sf.lcd_density can be used to override ro.sf.lcd_density
  17. // when running in the emulator, allowing for dynamic configurations.
  18. // The reason for this is that ro.sf.lcd_density is write-once and is
  19. // set by the init process when it parses build.prop before anything else.
  20. return SystemProperties.getInt("qemu.sf.lcd_density",
  21. SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); // 从系统属性ro.sf.lcd_density里获取屏幕密度
  22. // 文件位置:android4.0\packages\inputmethods\latinime\java\src\com\android\inputmethod\latin\Utils.java
  23. public static float getDipScale(Context context) {
  24. final float scale = context.getResources().getDisplayMetrics().density;
  25. return scale;
  26. }
  27. public static int dipToPixel(float scale, int dip) {
  28. return (int) (dip * scale + 0.5); // dip到px的换算公式
  29. }                </span>

二、sp(Scaled Pixels)

主要用于字体显示,与刻度无关的一种像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。

    1. <span style="color:#333333;">// 文件位置:android4.0\packages\apps\settings\src\com\android\settings\Display.java
    2. private Spinner.OnItemSelectedListener mFontSizeChanged
    3. = new Spinner.OnItemSelectedListener() {
    4. public void onItemSelected(android.widget.AdapterView av, View v,
    5. int position, long id) {
    6. if (position == 0) {  // 下面是设置字体比例的代码
    7. mCurConfig.fontScale = .75f;
    8. } else if (position == 2) {
    9. mCurConfig.fontScale = 1.25f;
    10. } else {
    11. mCurConfig.fontScale = 1.0f;
    12. }
    13. updateFontScale();
    14. }
    15. public void onNothingSelected(android.widget.AdapterView av) {
    16. }
    17. };
    18. private void updateFontScale() {
    19. mDisplayMetrics.scaledDensity = mDisplayMetrics.density *
    20. mCurConfig.fontScale; // 将设置的字体比例代码合到scaledDensity里去
    21. float size = mTextSizeTyped.getDimension(mDisplayMetrics);
    22. mPreview.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
    23. }                 </span>
转换代码如下

[java] view plaincopy

    /**
* dp、sp 转换为 px 的工具类
*
* @author fxsky 2012.11.12
*
*/
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);
}
} //第二中转换方法
private int dp2px(int value) {
float v = getContext().getResources().getDisplayMetrics().density;
return (int) (v * value + 0.5f);
} private int sp2px(int value) {
float v = getContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (v * value + 0.5f);
}

Android px、dp、sp之间相互转换 系统默认12 sp的更多相关文章

  1. Android px、dp、sp之间相互转换

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

  2. android如何调用显示和隐藏系统默认的输入法(一)

    1.调用显示系统默认的输入法 方法一. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_MET ...

  3. android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类<br/> ...

  4. Android px,dp,pt,sp的差别

    px(像素点) mm 等Android不建议用 为什么电脑web开发能够用而Android不建议用? 由于px代表像素点个数,一般电脑分辨率都同样 不管14寸还是15寸都是1366*768而手机分辨率 ...

  5. android:px,dp(dip),sp的差别

    1.px:表示屏幕的实际像素,比如320*480的屏幕在横向有320个像素,在纵向有480个像素,假设指定的某个空间的单位为px.那么在不同分辨率下的手机上.显示的都是指定的大小.一般不推荐使用px. ...

  6. android px dp sp

    http://www.zcool.com.cn/article/ZMTUxODQw.html

  7. 图片的像素和Android的dp值之间的关系。

    这是一个困扰我很就得问题.今天在我的反复摸索下,总结出了一些个规律. 以下测试以魅族mx5为例. 手机参数:5.5英寸:高:1920:宽1080. /** * 获得屏幕的宽度 * * @param c ...

  8. Android中dip, dp, px,pt, sp之间的区别:

    Android中dip.dp.sp.pt和px的区别   1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...

  9. Android中常用单位dp,px,sp之间的相互转换

    MainActivity如下: package cc.testunitswitch; import android.os.Bundle; import android.util.DisplayMetr ...

随机推荐

  1. 开发团队在TFS中使用Git Repository (二)

    使用Git作分支时,仅仅是对提交历史记录的一个引用,创建分支成本非常低,分支的切换快且简单.在分支管理方面,相对其他的版本管理工具,Git可谓是一骑绝尘. 开发过程中,我们可以针对任何的大小功能进行分 ...

  2. Redis key 相关命令

    其实本质上,Redis 就是一个Key---Value 数据库.这里我先介绍下Redis中关于的key的相关命令, 注意:key是字符串存储,但是不能使用 空格 或者 “\n”,value 则可以使用 ...

  3. 使用SpringMvc调用POI jar导出excel的源码

    @RequestMapping(value = "/result/export") public String export(ResultIn in,HttpServletRequ ...

  4. thinkjs之页面跳转

    对于刚入手thinkjs项目的新手来说,时常会犯的一个错误就是“混用”各种代码逻辑,比如:我们经常在做后台管理系统的时候用到的登录框,,其实它原本是有一个路由专门存放自己的代码逻辑,而在点击提交按钮的 ...

  5. Spring集成MyBatis框架

    Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为 ...

  6. 自学javaee程序员之路--ssm的小项目(一)

    大家好~我叫王聪,缩写是WC(不是厕所!不是厕所!).是一名某内陆大四的学生.这两个月自学了javaee---关于web的一些心得,分享记录一下.建立这个博客的目的是望各位前辈学长指正批评~~也是建立 ...

  7. SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异

    在数据库服务器上想还原一个数据库到某个备份文件时期的,服务器的数据库文件本身是保存在 D:\DEVDB目录 通过开发电脑上的MS manager来连接数据库服务器操作还原 虽发现文件卡项上,原始文件名 ...

  8. Robot Framework和Selenium 2 Grid集成指南

    1. 环境搭建 A. 所需软件 1. Selenium2Lib 1.0.1 这个特性需要用到Selenium2Lib的最新版本1.0.1,但是这个版本还有一些iframe支持和IE支持的问题需要修改, ...

  9. [hadoop] - Container [xxxx] is running beyond physical/virtual memory limits.

    当运行mapreduce的时候,有时候会出现异常信息,提示物理内存或者虚拟内存超出限制,默认情况下:虚拟内存是物理内存的2.1倍.异常信息类似如下: Container [pid=13026,cont ...

  10. BZOJ 3208: 花神的秒题计划Ⅰ

    这就是一道滑雪嘛= = 所有操作都爆力,求路径就dp,完了 CODE: #include<cstdio>#include<iostream>#include<algori ...