Android开发之单位转换,dp、px、sp

Android开发之单位转换,dp、px、sp

在开放过程中,毕竟UI不是程序员画的,碰到专业技术好点的美工还好,碰到刚开始搞ui的,提供的图片尺寸,字体大小,切图尺寸各种让你无奈。在这里可以解决美工提供的尺寸单位不是自己想要的,可以进行相互转换。

1.现在目前市面的手机屏幕尺寸

480*800       dp表示:   hdpi    密实系数:1.5

720*1280     dp表示:   xhdpi    密实系数:2

1080*1920   dp表示:   xxhdpi   密实系数:3  

1440*2560   dp表示:   xxxhdpi   密实系数:3.5  

但是有的UI真的是懒惰,为适配Android 和 ios 而做一套ios的规格尺寸(1242 x 2208)图片去适配两种系统,这种是最烦人的。怎么办?

可以这样认为:1242 x 2208        密实系数:3.5

 

2.如果用代码进行转换:获取密实系数,结算转换

	/**
	 * dp转px
	 * @param dp
	 * @return
	 */
	public static int dip2px(int dp)
	{
		float density = getContext().getResources().getDisplayMetrics().density;
		return (int) (dp*density+0.5);
	}

	/** px转换dip */
	public static int px2dip(int px) {
		final float scale = getContext().getResources().getDisplayMetrics().density;
		return (int) (px / scale + 0.5f);
	}
	/** px转换sp */
	public static int px2sp(int pxValue) {
		final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity;
		return (int) (pxValue / fontScale + 0.5f);
	}
	/** sp转换px */
	public static int sp2px(int spValue) {
		final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity;
		return (int) (spValue * fontScale + 0.5f);
	}

 

3.如果实在xml中写尺寸:

根据UI提供的图片尺寸选择密度系数,然后要用的尺寸   除以或者乘以  系数+0.5=你要的。

例如:图片一般标注的都是px,但是我们要用dp。可以这样转换  px / 系数+0.5=dp。

例如:图片上标注的字体也是px,但是我们要用sp。还是用上一行的那个公式处理转换。

 

 

 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 设备上,像素(Pixel)是指显示屏上的最小颜色点,而 dpsppx 则用于描述在不同分辨率的设备上,一个视觉元素的尺寸和位置。 - dp(density-independent pixels):密度无关像素。是一种基于屏幕密度的抽象单位,它可以让布局在不同的设备上有相同的显示效果。1dp 对应的像素数取决于设备的屏幕密度。通常,在设计 UI 时应使用 dp 单位。 - sp(scale-independent pixels):与 dp 类似,但用于描述文字大小。与 dp 不同的是,用户可以在系统设置中调整字体大小,因此 sp 的值会随着用户在系统设置中的调整而发生变化。 - px(pixels):像素。是屏幕上的最小显示单位,1px 对应一个实际的像素点。在设计 UI 时,应该尽量避免使用 px,因为在不同分辨率的设备上会导致 UI 显示效果不一致。 在布局文件中,可以使用 dpsp 单位来设置视觉元素的尺寸和位置,例如: ``` <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:padding="8dp" android:text="Hello, world!" /> ``` 在代码中,可以使用以下方法将 dpsp 转换px: ``` // 将 dp 转换px int px = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics()); // 将 sp 转换px int px = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值