MainActivity如下:

package cc.testunitswitch;

import android.os.Bundle;
import android.util.DisplayMetrics;
import android.app.Activity;
/**
* Demo描述:
* 利用代码实现dp,px,sp之间的相互转换
*
* 参考资料:
* 1 http://blog.csdn.net/fx_sky/article/details/8588703
* 2 http://blog.csdn.net/lfdfhl/article/details/8227257
* Thank you very much
*
*/
public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//以下为测试代码
Util.pixelToDip(this, 20);
Util.dipToPixel(this, 13);
Util.pixelToSp(this, 40);
Util.spToPixel(this, 26.666667f);
} }

Util如下:

package cc.testunitswitch;

import android.content.Context;

/**
* dp,px,sp之间的相互转换
*
* 备注说明:
* 在例子中有许多地方执行了X+0.5的操作
* 1 因为我们传入的参数是均为float类型,返回值却都是int类型
* 在float转换为int是都会将小数去掉.比如:
* float 19.15f--->int 19
* float 19.99f--->int 19
* 2 density和scaledDensity均为float类型
*
* 所以为了尽可能准确地取整数,我们执行了这样的操作.即:
* float 19.15f--->float (19.15+0.5)f=float 19.65f--->int 19
* float 19.99f--->float (19.99+0.5)f=float 20.49f--->int 20
*
*/
public class Util { //将pixel转换成dip(dp)
public static int pixelToDip(Context context, float pixelValue) {
float density = context.getResources().getDisplayMetrics().density;
int dipValue=(int) (pixelValue / density + 0.5f);
System.out.println("pixelToDip---> pixelValue="+pixelValue+",density="+density+",dipValue="+dipValue);
return dipValue;
} //将dip(dp)转换成pixel
public static int dipToPixel(Context context, float dipValue) {
float density = context.getResources().getDisplayMetrics().density;
int pixelValue=(int) (dipValue * density + 0.5f);
System.out.println("dipToPixel---> dipValue="+dipValue+",density="+density+",pixelValue="+pixelValue);
return pixelValue;
} //将pixel转换成sp
public static int pixelToSp(Context context, float pixelValue) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
int sp=(int) (pixelValue / scaledDensity + 0.5f);
System.out.println("pixelToSp---> pixelValue="+pixelValue+",scaledDensity="+scaledDensity+",sp="+sp);
return sp;
} //将sp转换成pixel
public static int spToPixel(Context context, float spValue) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
int pixelValue=(int) (spValue * scaledDensity + 0.5f);
System.out.println("spToPixel---> spValue="+spValue+",scaledDensity="+scaledDensity+",pixelValue="+pixelValue);
return pixelValue;
} }

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="dp,px,sp之间的相互转换"
android:layout_centerInParent="true"
/> </RelativeLayout>

Android中常用单位dp,px,sp之间的相互转换的更多相关文章

  1. android中像素单位dp、px、pt、sp的比较

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

  2. Android度量单位说明(DIP,DP,PX,SP) (转帖)

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

  3. Android度量单位说明(DIP,DP,PX,SP)

    本文转载于:http://blog.sina.com.cn/s/blog_6b26569e0100xw6d.html (一)概念 dip: device independent pixels(设备独立 ...

  4. Android开发之dip, dp, px, sp区别

    显示单位px和dip以及sp的区别 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和Q ...

  5. Android中dip、dp、sp、pt和px的区别

    1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况 ...

  6. Android中dip,dp,sp,pt和px的区别

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

  7. Android单位转换 (px、dp、sp之间的转换工具类)

    在Android开发中,涉及到屏幕视频问题的时候,px.dp.sp之间的转换比较重要的一部分,所以杨哥整理了一个工具类给大伙用. package com.zw.express.tool; import ...

  8. UI设计中px、pt、ppi、dpi、dp、sp之间的关系

    UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...

  9. [转]Android中dp,px,sp概念梳理以及如何做到屏幕适配

    http://blog.csdn.net/jiangwei0910410003/article/details/40509571 今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI ...

随机推荐

  1. Shell函数的简单应用

    Shell函数的简单应用 在脚本内给函数传参: #!/bin/bash . /etc/init.d/functions CheckUrl (){ curl -I -s $ | head - } Che ...

  2. MySQL学习笔记——复制的实现原理

    1.三个线程 MYSQL复制是从主服务器复制到一个或多个从服务器的异步过程,在主服务器与从服务器之间实现整个复制过程主要由三个线程来实现,其中一个线程I\O在主服务器器端,另两个线程(SQL线程和I\ ...

  3. 一表格简单明了区分BI和大数据

    大数据和BI两词现阶段处于刷屏状况,但是,很多人对于这两词确傻傻分不清.改怎么区别呢?本文将从概念.应用.发展趋势等多个角度对大数据和BI进行区分. BI(Business Intelligence) ...

  4. jQuery基础修炼圣典—DOM篇(二)jQuery遍历

    1.children()方法 jQuery是一个合集对象,如果想快速查找合集里面的第一级子元素,此时可以用children()方法.这里需要注意:.children(selector) 方法是返回匹配 ...

  5. Java遇见HTML——JSP篇之JSP内置对象(上)

    一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...

  6. 修改文件中的内容,使用fileinput模块

    import fileinput filename = 'passwd' ,backup='.bak') print line.replace('root','ROOT') a = ' this is ...

  7. 笔记:ASP.NET MVC安全

    XSRF/CSRF Prevention in MVC ValidateAntiForgeryToken 参考这里的简单例子:http://www.asp.net/mvc/tutorials/mvc- ...

  8. Iterator和ListIterator主要区别(转)

    Iterator和ListIterator主要区别有: 一.ListIterator有add()方法,可以向List中添加对象,而Iterator不能. 二.ListIterator和Iterator ...

  9. vs2013 visual studio 插件安装

          svn插件: AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交.更新.添加文件,而不用在命令行或资源管理器中提交.而且该插件属于开源项目· 官网:htt ...

  10. Aptana Studio3开发Python和Ruby(最佳工具)

    即从: http://d1iwq2e2xrohf.cloudfront.net/tools/studio/standalone/3.3.1.201212171919/win/Aptana_Studio ...