老生常谈之Android里的dp和sp
Android里面的sp和dp网上有很多文章都谈过了,但是看后总有一种意犹未尽的感觉。现在我也来谈谈dp和sp,和大家交流一下,不对之处欢迎拍砖。
一、dp(或者dip device independent pixels)
一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px。不同设备有不同的显示效果,这个和设备硬件有关。
android里的代码如下:
// 文件位置:android4.0\frameworks\base\core\java\android\util\DisplayMetrics.javapublic static final int DENSITY_DEVICE = getDeviceDensity();public float density;public void setToDefaults() {widthPixels = 0;heightPixels = 0;density = DENSITY_DEVICE / (float) DENSITY_DEFAULT; // 这里dp用的比例 densityDpi = DENSITY_DEVICE;scaledDensity = density; // 这是sp用的比例xdpi = DENSITY_DEVICE;ydpi = DENSITY_DEVICE;noncompatWidthPixels = 0;noncompatHeightPixels = 0;}private static int getDeviceDensity() {// qemu.sf.lcd_density can be used to override ro.sf.lcd_density// when running in the emulator, allowing for dynamic configurations.// The reason for this is that ro.sf.lcd_density is write-once and is// set by the init process when it parses build.prop before anything else.return SystemProperties.getInt("qemu.sf.lcd_density",SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); // 从系统属性ro.sf.lcd_density里获取屏幕密度// 文件位置:android4.0\packages\inputmethods\latinime\java\src\com\android\inputmethod\latin\Utils.javapublic static float getDipScale(Context context) {final float scale = context.getResources().getDisplayMetrics().density;return scale;}public static int dipToPixel(float scale, int dip) {return (int) (dip * scale + 0.5); // dip到px的换算公式}
二、sp(Scaled Pixels)
主要用于字体显示,与刻度无关的一种像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。
// 文件位置:android4.0\packages\apps\settings\src\com\android\settings\Display.javaprivate Spinner.OnItemSelectedListener mFontSizeChanged= new Spinner.OnItemSelectedListener() {public void onItemSelected(android.widget.AdapterView av, View v,int position, long id) {if (position == 0) { // 下面是设置字体比例的代码mCurConfig.fontScale = .75f;} else if (position == 2) {mCurConfig.fontScale = 1.25f;} else {mCurConfig.fontScale = 1.0f;}updateFontScale();}public void onNothingSelected(android.widget.AdapterView av) {}};private void updateFontScale() {mDisplayMetrics.scaledDensity = mDisplayMetrics.density *mCurConfig.fontScale; // 将设置的字体比例代码合到scaledDensity里去float size = mTextSizeTyped.getDimension(mDisplayMetrics);mPreview.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);}
老生常谈之Android里的dp和sp相关推荐
- Android px、dp、sp之间相互转换
dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...
- Android像素单位dp,sp,px,pt的区别和比较
转载自: https://zhidao.baidu.com/question/1736411549687308627.html?qbl=relate_question_0&word=dp%BA ...
- Android 长度单位(dp、sp、px、in、pt、mm)详解
px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guid ...
- Android的px、dp和sp
Android的px.dp和sp px: 即像素,1px代表屏幕上一个物理的像素点:偶尔用到px的情况,是需要画1像素表格线或阴影线的时候. dp: 这个是最常用但也最难理解的尺寸单位.它与" ...
- android UI设计图片和文字尺寸px对应dp、sp值换算
屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等. 屏幕分辨率:指在纵横向上的像素点数,单位是px,1px为 ...
- android 关于px转化为dp,sp
一款优秀app的产生,往往需要有一套精美华丽的UI设计图,诚然,UI仅仅只是个开始,有追求极致的前端工程师开发软件时尽可能地去贴近UI的设计才是重中之重. 我们知道,Android的尺寸单位一般采用d ...
- Android中dp、sp、px、pt之间的换算关系
Android中dp.sp.px.pt之间的换算关系 换算公式 1 dp = (dpi/160) px; 1 in = 72 pt = dpi dp; 1 pt = dpi/72 dp: 当dpi为1 ...
- Android常用计量单位详解(px,in,mm,pt,dp,dip,sp)
Android常用计量单位详解(px,in,mm,pt,dp,dip,sp) 在传统PC软件开发中经常以像素为单位设计计算机用户界面.例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素, ...
- 【转】Android中dp,px,sp概念梳理以及如何做到屏幕适配
2019独角兽企业重金招聘Python工程师标准>>> 首先来看一下他们的基本概念: px :是屏幕的像素点 dp :一个基于density的抽象单位,如果一个160dpi的 ...
最新文章
- 奇点汽车打算明年推L3自动驾驶,不用激光雷达
- 一张图告诉你什么是系统架构师
- mathcal 对应于什么库_数据库理论
- codeforces 675E E. Trains and Statistic(线段树+dp)
- html flex 的高度,html – 使flexbox行成为最短子元素的高度?
- Linux VMware 快照不准,VmWare Workstation 关于Linux 虚拟机快照或克隆后 识别不到网卡问题...
- router优点 vue_Vue 出场率99%的面试题
- LayuI固定块关闭
- rabbitmq-web-stomp 优化过程
- poj2406(kmp循环节)
- debian8.4安装sqliteman总结
- java调用python需要复权吗_用Python从新浪下载A股复权因子信息
- 提升电脑运行速度,10个秘笈,让你的win10飞起来
- 【MySQL从入门到精通】【高级篇】(二十五)EXPLAIN中ref、rows、filtered、Extra字段的剖析
- python如何将秒数转化成时分秒_python时分秒化为秒 python时分秒的正则表达式
- LiveMedia视频平台是如何实现基于网页的语音对讲
- Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)
- 无向简单图怎么判断_无向图基础
- linux中如果编译二进制,在linux中把汇编或c程序交叉编译成二进制文件烧录开发板过程详解...
- Docker超详细版教程通俗易懂 -之- 进阶篇