【问题标题】:Setting text size to dynamically created EditText widgets produces different size for different android screens将文本大小设置为动态创建的 EditText 小部件会为不同的 android 屏幕产生不同的大小
【发布时间】:2015-05-19 20:00:51
【问题描述】:

我在按下添加按钮时动态添加 EditText。我已经处理了小部件的动态创建并将它们添加到现有的 xml 布局中。但问题在于文本大小。我在 xml 布局中使用 15 SP,并且希望动态创建的也保持相同的大小。

我已应用以下代码来动态计算文本大小:

int txtSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 15, getResources().getDisplayMetrics());
EditText child = new EditText(MyActivity.this); 
child.setTextSize(txtSize);

尽管我使用的是 Scaled Pixels,但它不会产生预期的结果,并且文本大小会根据不同的屏幕尺寸而变化。

请帮忙...

【问题讨论】:

    标签: android


    【解决方案1】:

    这是一种方法:

    1. 为具有不同屏幕尺寸的设备定义替代“样式”资源。

      • 创建 res/values-sw480dp 和 res/values-sw720dp 文件夹(假设您需要处理屏幕宽度 480 和 720 像素)
      • 在每个不同屏幕大小的资源文件夹中添加一个styles.xml
      • styles.xml 包含如下样式:

      <style name="DetailText"> <item name="android:textColor">@color/detail_text_color</item> <item name="android:textStyle">bold</item> <item name="android:textSize">22sp</item> </style>

    2. 在代码中添加逻辑以从样式文件中检索文本大小。此链接向您展示如何检索样式文件中的属性值:How to retrieve style attributes programmatically from styles.xml

    【讨论】:

    • 感谢梅林的回答。实际上上面的解决方案对我有用。非常感谢。
    【解决方案2】:

    试试:

    int textSize = 15;
    EditText child = new EditText(MyActivity.this); 
    child.setTextSize(Android.Util.ComplexUnitType.Sp, textSize);
    

    【讨论】:

    • 我正在使用 C#,这对我有用,也许您需要稍微更改一下这段代码才能在 java 上工作,但应该可以正常工作。
    • 感谢 Ivan Verges,它的工作,我用这个代替了 Java 语言 'child.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15)'
    【解决方案3】:

    只写这段代码

    EditText child = new EditText(MyActivity.this); 
    child.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
    

    参考

    http://developer.android.com/reference/android/util/TypedValue.html#COMPLEX_UNIT_SP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2011-04-10
      • 2012-04-10
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多