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

rbl8hiat  于 2023-04-04  发布在  Android
关注(0)|答案(5)|浏览(142)

基本上我在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转换为像素?

yeotifhr

yeotifhr1#

您可以用途:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());

现在,pixels的值相当于设备当前屏幕密度下的10dp
TypedValue包含其他有助于转换的类似方法。

zpjtge22

zpjtge222#

在这里解决。
提取物:

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

cu6pst1q3#

为了完整起见:这个问题的另一个解决方案(我更喜欢)是here
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文件中设置的。

uujelgoq

uujelgoq4#

关于设置TEXT SIZE:

对于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。

xienkqul

xienkqul5#

对于Kotlin来说,使用下面的逻辑来增加/减少字体大小。它在2

`  private var fontSize: Float = 17F //default font size
    
    btnTextDecrease.setOnClickListener {
       if (fontSize <= 13F) {return@setOnClickListener}
       fontSize -= 0.5F
       etBook.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize)
       Toast.makeText(activity, "Decrease Size$fontSize", Toast.LENGTH_SHORT).show()
    }

    btnTextIncrease.setOnClickListener {
       fontSize += 0.5F
       etBook.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize)
       Toast.makeText(activity, "Increase Size$fontSize", Toast.LENGTH_SHORT).show()
    }`

相关问题