在 Android 中将 dp 转换为 px 时出现的错误
Errors that occur when converting dp to px in Android
我正在使用此代码将 dp 更改为 px。
public static int DpToPixel(Context context, int DP) {
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DP, context.getResources().getDisplayMetrics());
return (int) px;
}
问题
以编程方式创建 TextView 时,设置宽度和高度(以像素为单位),如下行所示。
val width = DpToPixel(requireContext(), 96)
val height = DpToPixel(requireContext(), 14)
val textView = TextView(requireContext()).apply {
layoutParams = ConstraintLayout.LayoutParams(width, height)
}
因此,我认为 textView 的宽度为 96dp,高度为 14dp。
然而,当我实际检查时,textView 的高度设置为 13dp。
问题
dp转px时出现错误如何解决?
是否有使用 DP 单位的宽度和高度创建 TextView
?
感谢您阅读我的问题。
将视图添加到父视图组后更新布局参数:
val txt = TextView(requireContext())
parentView.addView(txt)
txt.updateLayoutParams<ConstraintLayout.LayoutParams> { // Update width and height
width = YOUR_DP_WIDTH
height = YOUR_DP_HEIGHT
}
通过viewTreeObserver
检查测量的宽度和高度:
txt.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
txt.viewTreeObserver.removeOnGlobalLayoutListener(this)
Log.e("MEASURE", "W: ${txt.measuredWidth}, H: ${txt.measuredHeight}") // Here you can check measured width and height
Log.e("MEASURE", "ConvertedW: ${YOUR_DP_WIDTH}, ConvertedH: ${YOUR_DP_HEIGHT}") // And compare sizes with converted values
}
})
最好从维度资源中提取所需的值:
val txtWidth = resources.getDimensionPixelOffset(R.dimen.txt_width) // Int
val txtWidth = resources.getDimensionPixelSize(R.dimen.txt_width) // Rounded Int
val txtWidth = resources.getDimension(R.dimen.txt_width) // Float
我正在使用此代码将 dp 更改为 px。
public static int DpToPixel(Context context, int DP) {
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DP, context.getResources().getDisplayMetrics());
return (int) px;
}
问题
以编程方式创建 TextView 时,设置宽度和高度(以像素为单位),如下行所示。
val width = DpToPixel(requireContext(), 96)
val height = DpToPixel(requireContext(), 14)
val textView = TextView(requireContext()).apply {
layoutParams = ConstraintLayout.LayoutParams(width, height)
}
因此,我认为 textView 的宽度为 96dp,高度为 14dp。
然而,当我实际检查时,textView 的高度设置为 13dp。
问题
dp转px时出现错误如何解决?
是否有使用 DP 单位的宽度和高度创建
TextView
?
感谢您阅读我的问题。
将视图添加到父视图组后更新布局参数:
val txt = TextView(requireContext())
parentView.addView(txt)
txt.updateLayoutParams<ConstraintLayout.LayoutParams> { // Update width and height
width = YOUR_DP_WIDTH
height = YOUR_DP_HEIGHT
}
通过viewTreeObserver
检查测量的宽度和高度:
txt.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
txt.viewTreeObserver.removeOnGlobalLayoutListener(this)
Log.e("MEASURE", "W: ${txt.measuredWidth}, H: ${txt.measuredHeight}") // Here you can check measured width and height
Log.e("MEASURE", "ConvertedW: ${YOUR_DP_WIDTH}, ConvertedH: ${YOUR_DP_HEIGHT}") // And compare sizes with converted values
}
})
最好从维度资源中提取所需的值:
val txtWidth = resources.getDimensionPixelOffset(R.dimen.txt_width) // Int
val txtWidth = resources.getDimensionPixelSize(R.dimen.txt_width) // Rounded Int
val txtWidth = resources.getDimension(R.dimen.txt_width) // Float