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. 初识Dapper

    16年年底开发一个项目,拍卖的项目,对于我这个不入流的程序员来说,雪微是个挑战.程序猿这个行业就是学到老用到老吧.个人比较喜欢sql原生的写法,对EF 还是不怎么感冒,EF 虽然强大,但是用起来还不怎 ...

  2. 免越狱tweak应用逆向开发

    对于已越狱的设备,系统默认安装了mobilesubstrate动态库,提供一个系统级的入侵管道,所有的tweak都可以依赖它来进行开发.而对于没有越狱的手机,我们需要向目标app注入libsubstr ...

  3. 使用express.js框架一步步实现基本应用以及构建可扩展的web应用

    最近过年在家有点懈怠,但是自己也不断在学习新的前端技术,在家琢磨了express.js的web框架. 框架的作用就是提高开发效率,快速产出结果.即使不使用框架,我们也会在开发过程中逐渐形成构成框架. ...

  4. Struts1文件上传、单文件、多文件上传【Struts1】

     将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘: Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/d ...

  5. LinkedList底层实现,及其数据结构实现。

    LinkedList底层的实现基于双向表 prev data next next指向下一个node的地址.prev指向上一个node. 这里的代码是LinkedList类的源码. private st ...

  6. 今日头条- iOS客户端 启动速度优化实践

    版权声明 作者:今日头条iOS团队 原文:https://techblog.toutiao.com/2017/01/17/iosspeed/ 应用启动时间,直接影响用户对一款应用的判断和使用体验.头条 ...

  7. 各类编译器 allocator 底层

    我们在c++中创建数组通常使用new来分配我们需要的内存大小,之后通过delete进行释放内存 但是我们调用new的时候,通过调用的是operator new,二operator new调用的是mal ...

  8. IOS任务管理之NSThread使用

    前言: 无论是Android还是IOS都会使用到多任务,多任务的最小单元那就是线程,今天学习总结一下IOS的NSThread使用. NSThread使用? 第一种方式实例化 //selector :线 ...

  9. Angular实现购物车计算

    使用AngularJS实现一个简单的购物车,主要感受强大的双向绑定和只关注对象不关注界面特性. 先看看界面: 点击+-操作和删除: 这些全部只需要操作数据源就行,不需要关注界面. 实现过程: 一.使用 ...

  10. 5_jQuery选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/stric ...