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

Rob*_*hai 37 java layout android

基本上我有这个内部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" />
Run Code Online (Sandbox Code Playgroud)

我可以使用它来设置文本大小,但layout_width和height呢?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉代码使用DP单元而不是像素?或转换功能将DP转换为像素?

小智 86

您可以使用:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)

现在,该值pixels等于10dp设备当前的屏幕密度.

的TypedValue包含其他类似的方法,在转换帮助.


sve*_*ven 48

解决了这里.

提取:

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


Jul*_*rst 12

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

setTextSize(float)期望缩放的像素值.那么,setTextSize(10)会给你想要的结果.但是,getDimension()getDimensionPixelSize()以像素为单位返回大小.

所以对于你的例子来说就是这样

setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));
Run Code Online (Sandbox Code Playgroud)

其中,<dimen name="edtxt_text_size">10dp</dimen>在例如你dimens.xml文件设置.