xml 中的 dp 与 java dp-px 转换不匹配
Dp in xml doesn't match java dp-px conversion
由于循环重复,我需要在 java 而不是 xml 中设置文本、边距或图像的大小。
当我在 xml 文件中为文本设置 20dp 时,结果比使用此转换为 px 的相同 20dp 小 3 倍(Material 基于设计指南)转换方法:
dp =(以像素为单位的宽度 * 160)/密度
如何在 xml 和 java 之间获得相同的 dp?
结果:
<resources>
<dimen name="cat_height">20dp</dimen>
</resources>
xml:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Business"
android:textSize="@dimen/cat_height"
android:textStyle="bold" />
Java:
int dp20 = getResources().getDimensionPixelSize(R.dimen.cat_height);
(...)
TextView categoryText = new TextView(this);
categoryText.setText(subCategoryNames.get(i));
categoryText.setTextSize(dp20);
categoryText.setTypeface(null, Typeface.BOLD);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(dp20, dp20, dp20, dp20);
mainLinear.addView(categoryText, params);
above xml, below java result
提前致谢!
使用这个
categoryText.setTextSize(TypedValue.COMPLEX_UNIT_PX,dp20);
由于循环重复,我需要在 java 而不是 xml 中设置文本、边距或图像的大小。
当我在 xml 文件中为文本设置 20dp 时,结果比使用此转换为 px 的相同 20dp 小 3 倍(Material 基于设计指南)转换方法:
dp =(以像素为单位的宽度 * 160)/密度
如何在 xml 和 java 之间获得相同的 dp?
结果:
<resources>
<dimen name="cat_height">20dp</dimen>
</resources>
xml:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Business"
android:textSize="@dimen/cat_height"
android:textStyle="bold" />
Java:
int dp20 = getResources().getDimensionPixelSize(R.dimen.cat_height);
(...)
TextView categoryText = new TextView(this);
categoryText.setText(subCategoryNames.get(i));
categoryText.setTextSize(dp20);
categoryText.setTypeface(null, Typeface.BOLD);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(dp20, dp20, dp20, dp20);
mainLinear.addView(categoryText, params);
above xml, below java result
提前致谢!
使用这个
categoryText.setTextSize(TypedValue.COMPLEX_UNIT_PX,dp20);