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. iOS面试题01

    1.#import和#include.@class有什么区别?#import<>和#import“”又有什么区别? 答:1.#import和#include都能完整地包含某个文件的内容,# ...

  2. django 笔记

    最近开始接触django,一些基本的操作记录于此. 参考链接: http://www.ziqiangxuetang.com/django/django-tutorial.html django安装 s ...

  3. iOS:GPUImage强大的图像处理框架

    GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图像. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ...

  4. thinkphp 对数据库的操作

    查看ThinkPHP完全开发手册3.1 首先编辑配置文件 thinkphp这个数据库就不乱改了 昨天新建了一个 confluence(utf8)数据库 所以就用它学习一下吧,因为就只建立了一个数据库, ...

  5. MVC项目实践,在三层架构下实现SportsStore-04,实现分页

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  6. SwipeRefreshLayout实现上拉加载下拉刷新

    package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...

  7. Vue.2.0.5-过渡状态

    过渡状态 Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都 ...

  8. javascript表单操作方法

    一.Form元素 相关属性: 1,action属性 2,elements属性 3,length属性 4,name属性 5, method属性 如果多个表单字段的name属性相同,那么提交的value就 ...

  9. QString 和 TCHAR 的相互转换

    参考资料: http://www.cnblogs.com/fuyanwen/p/3200536.htmlhttp://www.cnblogs.com/wendao/archive/2012/07/27 ...

  10. Collections的排序之一(Java)

    package home.collection.arr; import java.util.ArrayList; import java.util.Collections; import java.u ...