Android dip(dp) 与 sp的自适应问题
来源:互联网 发布:土摩托 知乎 编辑:程序博客网 时间:2024/05/18 22:14
本文转载于:http://www.oschina.net/question/272860_70761
今天碰到的一个问题,感觉应该其他人也会碰到,拿来分享一下。
我们都知道android在开发配置界面时一般都会使用dip和sp这种逻辑长度单位来实现屏幕无关,我也正是这么做的,今天用同事的I9300跑了一下我写的demo,发现”不对啊“,我自己的手机显示没问题啊,但在9300中出现了问题。主要就是一些按钮的背景是.9.png,其中文本是充满整个可填充区域的,结果在9300里面文字过大只能显示一部分。我反正郁闷了好一会,分析了一下可能原因最终锁定在dip和sp的使用上。在android内部会使用TypedValue.applyDimension函数将所有单位换算成px,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public
static
float
applyDimension(
int
unit,
float
value,
DisplayMetrics metrics)
{
switch
(unit) {
case
COMPLEX_UNIT_PX:
return
value;
case
COMPLEX_UNIT_DIP:
return
value * metrics.density;
case
COMPLEX_UNIT_SP:
return
value * metrics.scaledDensity;
case
COMPLEX_UNIT_PT:
return
value * metrics.xdpi * (
1
.0f/
72
);
case
COMPLEX_UNIT_IN:
return
value * metrics.xdpi;
case
COMPLEX_UNIT_MM:
return
value * metrics.xdpi * (
1
.0f/
25
.4f);
}
return
0
;
}
虽然google推荐使用sp作为 android:textSize 属性的单位,但实际情况下,还是有可能出现问题:D
---------------话题补充---------------
@soso_fy:I9300确实有字体大小的设置选项,而且我同事的手机确实已经设置得比正常大一号(并不是所有手机都有该设置选项),为了界面布局的一致,像”按钮“之类的控件布局时还是使用dip做单位保险一点。
0 0
- Android dip(dp) 与 sp的自适应问题
- Android dip(dp) 与 sp的自适应问题
- Android dip(dp) 与 sp的自适应问题
- 【Android】手机屏幕分辨率与dip、dp、sp的区别
- Android中的dp、dip、sp与px
- dp(dip)与sp的区别
- android dp dip px sp的区别
- android dp dip px sp的区别
- android:px,dp(dip),sp的区别
- Android dip dp px sp
- android px dp dip sp
- android dip dp px sp
- android开发中px,dip,dp,sp,dpi的区别,以及dp与px换算公式.
- Android px与dip(dp)、px与sp单位的转换
- dp,sp,dip的区别
- Android中dip、dp、sp、pt、px的意思与区别
- 安卓手机屏幕分辨率与dip、dp、sp的区别
- Android中dip, dp, px, sp的区别
- 剑指Offer之 - 在O(1)时间删除链表结点
- 转载 java中线程队列BlockingQueue的用法
- C++拷贝构造函数和=赋值运算符详解
- 如何使用AndroidStudio进行快速注解开发
- 递归问题篇:
- Android dip(dp) 与 sp的自适应问题
- 黑马程序员--Java之GUI(10)
- java反射机制初步认识<四>注解+反射形成简易IOC
- C++指向虚函数表指针存放位置
- centos7上编译FreeSwitch备忘
- Linux的自旋锁struct spinlock_t的使用
- 关于如何判断 grep 返回结果
- 配置mpich2运行环境
- MyBatis入门应用