Android中常用单位dp,px,sp之间的相互转换
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之间的相互转换的更多相关文章
- android中像素单位dp、px、pt、sp的比较
dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...
- Android度量单位说明(DIP,DP,PX,SP) (转帖)
(一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...
- Android度量单位说明(DIP,DP,PX,SP)
本文转载于:http://blog.sina.com.cn/s/blog_6b26569e0100xw6d.html (一)概念 dip: device independent pixels(设备独立 ...
- Android开发之dip, dp, px, sp区别
显示单位px和dip以及sp的区别 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和Q ...
- Android中dip、dp、sp、pt和px的区别
1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况 ...
- Android中dip,dp,sp,pt和px的区别
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. ...
- Android单位转换 (px、dp、sp之间的转换工具类)
在Android开发中,涉及到屏幕视频问题的时候,px.dp.sp之间的转换比较重要的一部分,所以杨哥整理了一个工具类给大伙用. package com.zw.express.tool; import ...
- 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) 声明:本文由入驻搜狐公众 ...
- [转]Android中dp,px,sp概念梳理以及如何做到屏幕适配
http://blog.csdn.net/jiangwei0910410003/article/details/40509571 今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI ...
随机推荐
- emmc boot1 boot2 partition
使用mfg tool烧写android5.1的镜像之后,再使用旧版的mfg tool烧写linux或者android镜像,都不能正常启动,而且运行的uboot还是android5.1版本的uboot. ...
- ASP.NET中application对象的用法
一.Application对象的理解 Application对象在实际网络开发中的用途就是记录整个网络的信息,如上线人数.在线名单.意见调查和网上选举等.在给定的应用程序的多有用户之间共享信息,并在服 ...
- 利用css做扇形
html和css每一块的边边角角都是直来直去,除了border-raius,要怎么做扇形了?当然,你如果只想要得到直角扇形,和半圆,那就很简单?那么做小于180的直角扇形,如何做了(大于180的直角无 ...
- 选择时区的命令tzselect
选择时区的命令tzselect tzselectPlease identify a location so that time zone rules can be set correctly.Plea ...
- 前端开发者需要的10个Sublime插件
Sublime Text是最强大的代码编辑器之一,它具有一些神奇的功能,而且可以通过安装插件或包来变得更强大.这些插件为Sublime Text添加了额外的功能.当今有很多插件可以用来满足几乎任何你的 ...
- svn更新项目时遇到被锁住的问题
来自:http://blog.csdn.net/woshixuye/article/details/7776742 遇到问题 我们用svn更新某个项目的时候,有时候会遇到一些什么文件夹被locked等 ...
- ThinkPHP 自动验证与自动填充无效可能的原因(转)
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...
- UISegment属性
1.segmentedControlStyle 设置segment的显示样式. typedefNS_ENUM(NSInteger, UISegmentedControlStyle) { UISegme ...
- gradient color
http://www.cnblogs.com/YouXianMing/p/3793913.html layer 不能自动autolay, 只能在viewDidLayout里面设置宽度 - (void) ...
- <s:select>中list获取action中数据
jsp: <s:select name="cate1.id" list="cate1list" listKey="id" listVa ...