测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
sp = 尺寸独立像素
dpi = 英寸点
我们应该避免使用 sp. 我们应该使用 dp 支持多个屏幕。
Android 支持不同的屏幕分辨率
ldpi (低) ~120 dpi mdpi (中) ~160 dpi hdpi (高) ~240 dpi xhdpi (超高) ~320 dpi xxhdpi (超高) ~480 dpi xxxhdpi (超高) ~640 dpi
与其他密度相同。
像素 = dp * (密度 / 160)
因此, 240 dpi 裝置的 1 dp 將有 = 1 * (240/160) = 3/2 = 1.5 像素。
480 dpi 裝置的 1 dp 將有 = 1 * (480/160) = 3 像素。
使用此 1.5 和 3 像素的知识,一个软件工程师可以设计不同的密度的布局。
要检查任何设备的屏幕参数:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
其他回答
您可以从下图中看到 px 和 dp 的差异,您也可以发现 px 和 dp 无法在不同屏幕上保证相同的物理尺寸。
此分類上一篇
sp = 尺寸独立像素
dpi = 英寸点
我们应该避免使用 sp. 我们应该使用 dp 支持多个屏幕。
Android 支持不同的屏幕分辨率
ldpi (低) ~120 dpi mdpi (中) ~160 dpi hdpi (高) ~240 dpi xhdpi (超高) ~320 dpi xxhdpi (超高) ~480 dpi xxxhdpi (超高) ~640 dpi
与其他密度相同。
像素 = dp * (密度 / 160)
因此, 240 dpi 裝置的 1 dp 將有 = 1 * (240/160) = 3/2 = 1.5 像素。
480 dpi 裝置的 1 dp 將有 = 1 * (480/160) = 3 像素。
使用此 1.5 和 3 像素的知识,一个软件工程师可以设计不同的密度的布局。
要检查任何设备的屏幕参数:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
计算像素密度
密度独立性
屏幕像素密度和分辨率取决于平台,设备独立的像素和可扩展的像素是提供一个灵活的方式,以适应整个平台的设计。
计算像素密度 匹配英寸的像素数量被称为像素密度. 高密度屏幕每英寸比低密度的像素多。
密度独立的像素,写作为dp(发音为“dips”),是灵活的单位,规模在任何屏幕上均匀的尺寸。
低密度屏幕显示与密度独立高密度屏幕显示与密度独立
px = 指屏幕上的像素可用于像素计算 px = dp * (dpi / 160) 可用于 dip = 密度独立的像素相当于 dp sp = 只能用于文本
SDP - 一个可扩展的尺寸单位 - 基本上它不是一个单位,而是不同屏幕大小的尺寸资源。
在 Intuit 中尝试 sdp 图书馆. 解决单位问题非常方便,您可以快速支持多个屏幕。
使用
android:paddingBottom="@dimen/_15sdp" for positive and android:layout_marginTop="@dimen/_minus10sdp" for negative sdp sdp
它在每个尺寸的值-sw<N>dp 文件夹(sw = 最小Width)中具有相当值。
注意
在大多数情况下,你仍然需要为平板电脑设计不同的布局。
例子
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_minus10sdp"
android:paddingBottom="@dimen/_15sdp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="♡"
android:textColor="#ED6C27"
android:textSize="@dimen/_70sdp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="U"
android:textColor="@android:color/black"
android:textSize="@dimen/_70sdp" />
</LinearLayout>
你可以用db为文本大小,但我更喜欢ssp为文本大小。
更多详细信息请参阅图书馆 GitHub 页面。
推荐文章
- 如何隐藏动作栏之前的活动被创建,然后再显示它?
- 是否有一种方法以编程方式滚动滚动视图到特定的编辑文本?
- 在Android中将字符串转换为Uri
- 如何在NestedScrollView内使用RecyclerView ?
- 移动到另一个EditText时,软键盘下一步点击Android
- Android应用中的GridView VS GridLayout
- Activity和FragmentActivity的区别
- 右对齐文本在android TextView
- 权限拒绝:start前台需要android.permission.FOREGROUND_SERVICE
- 滑动删除和“更多”按钮(就像iOS 7的邮件应用程序)
- 如何更改android操作栏的标题和图标
- Android Split字符串
- 让一个链接在安卓浏览器启动我的应用程序?
- 如何在Android工作室的外部库中添加一个jar ?
- GridLayout(不是GridView)如何均匀地拉伸所有子元素