【问题标题】:How do I set Layout and Text size to DP inside program?如何在程序内将布局和文本大小设置为 DP?
【发布时间】:2010-07-23 08:13:56
【问题描述】:

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

【问题讨论】:

标签: java android layout


【解决方案1】:

你可以使用:

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

现在pixels 的值相当于设备当前屏幕密度下的10dp

TypedValue 包含其他有助于转换的类似方法。

【讨论】:

    【解决方案2】:

    已解决here

    摘录:

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

    【讨论】:

    • 注意,应该是 .scaledDensity 但这个解决方案现在似乎不适用于现代机器人(它太大了)
    • .. 设置文字大小时
    【解决方案3】:

    为了完整起见:here

    给出了该问题的另一种解决方案(我更喜欢)

    setTextSize(float) 需要一个缩放的像素值。所以,setTextSize(10) 会给你想要的结果。但是,getDimension()getDimensionPixelSize() 以像素为单位返回大小。

    所以你的例子是

    setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));
    

    例如,&lt;dimen name="edtxt_text_size"&gt;10dp&lt;/dimen&gt; 在您的 dimens.xml 文件中设置。

    【讨论】:

      【解决方案4】:

      关于设置文本大小:

      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。

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 2018-03-02
        • 2022-01-18
        • 1970-01-01
        • 2021-10-01
        • 2020-05-11
        相关资源
        最近更新 更多