繁体   English   中英

如何在程序内将布局和文本大小设置为 DP?

[英]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包含有助于转换的其他类似方法。

在这里解决

提炼:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);

只是为了完整性:这里给出了该问题的另一个解决方案(我更喜欢)

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 完全匹配:

检查,在所有设备上,这产生的结果与仅在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM