[英]How do I set Layout and Text size to DP inside program?
基本上我在 XML 中有这个,但我必须在代码中重新创建它。 我该怎么做?
<EditText
android:layout_width="140dp"
android:layout_height="20dp"
android:background="@drawable/input_bg01"
android:textSize="10dp"
android:gravity="center"
android:text="111-222-333 FOOO" />
我可以用它来设置文本大小,但是 layout_width 和 height 呢?
edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
有没有办法告诉代码使用 DP 单位而不是像素? 或者是将DP转换成像素的转换函数?
您可以使用:
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
现在, pixels
值相当于设备当前屏幕密度下的10dp
。
TypedValue包含有助于转换的其他类似方法。
只是为了完整性:这里给出了该问题的另一个解决方案(我更喜欢)
setTextSize(float)
需要缩放的像素值。 所以,setTextSize(10)
会给你想要的结果。 但是,getDimension()
和getDimensionPixelSize()
以像素为单位返回大小。
所以对于你的例子,它会是
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));
例如,其中<dimen name="edtxt_text_size">10dp</dimen>
在您的 dimens.xml 文件中设置。
对于 2021 年...
幸运的是,正确的现代答案是
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 25);
或者您可以使用 COMPLEX_UNIT_SP 等。
检查,在所有设备上,这产生的结果与仅在 xml 中设置它的结果完全相同:
int h = 66; // the new value
ViewGroup.LayoutParams p = some_frame.getLayoutParams();
float fdp = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
h,
getResources().getDisplayMetrics());
p.height = Math.round(fdp);
some_frame.setLayoutParams(p);
这似乎在测试设备上正常工作。 值“h”现在与 xml 中的“相同”,输入 66dp。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.