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. Fiddler-008-简单模拟性能测试

    通过 Fiddler 可以简单的模拟性能测试的并发测试,此方法非常的简单,直接讲述如何使用,敬请参阅! 首先我们要获取需要并发的 HTTP请求,此操作非常简单,则在此不再赘述.获取到响应的 HTTP请 ...

  2. 编译mod_jk.so

    编译mod_jk.so前,需要先到http://tomcat.apache.org/download-connectors.cgi去下载tomcat-connectors-1.2.41-src.tar ...

  3. LeetCode Closest Binary Search Tree Value II

    原题链接在这里:https://leetcode.com/problems/closest-binary-search-tree-value-ii/ 题目: Given a non-empty bin ...

  4. LeetCode Basic Calculator

    原题链接在这里:https://leetcode.com/problems/basic-calculator/ Implement a basic calculator to evaluate a s ...

  5. jquery效果

    //隐藏显示 <!doctype html> <html lang="en"> <head> <meta charset="UT ...

  6. 关于mysql的错误 - no query specified

    Mysql----error:no query specified mysql下抛出错误:error:no query specified出现此错误是sql不合法原因:如:select * from ...

  7. java web工程读取及修改配置文件

    这篇博客比自己讲解的详细: http://blog.sina.com.cn/s/blog_69398ed9010191jg.html 使用方法: 1)配置文件在web-info的class目录下,或者 ...

  8. iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)

    在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...

  9. Web Service测试利器 Postman

    利器推荐,下载地址 https://github.com/a85/POSTMan-Chrome-Extension 在chrome的扩展商店中安装失败 所以下载zip文件下来再导入到chrome扩展

  10. CSS的叠加

    CSS中的叠加分为以下三种: 1.上下叠加 CSS部分: #div1{ width:200px; height:50px; margin-bottom:30px; background:#ffff00 ...