【问题标题】:TextView - setting the text size programmatically doesn't seem to workTextView - 以编程方式设置文本大小似乎不起作用
【发布时间】:2011-10-23 08:36:32
【问题描述】:

我正在使用 Eclipse Indigo,在 2 个模拟器(2.2 和 3.0)上进行测试。

下面的代码显示了我现在正在测试的内容,但是在尝试运行模拟器时设置文本大小不会在屏幕上显示任何内容。(如果我注释掉文本大小,则文本显示为红色)。我认为不知何故 eclipse 并没有重建代码,但我添加了代码行来添加蓝色背景并且有效。我在设置文本后尝试设置文本大小仍然没有成功。代码如下。感谢您的帮助! (免责声明) - 我试图远离 xml。因为我已经知道 java 我不想依赖它。

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

【问题讨论】:

    标签: android


    【解决方案1】:

    请参阅this 链接以获取有关在代码中设置文本大小的更多信息。基本上它说:

    public void setTextSize (int unit, float size)

    自:API 级别 1 将默认文本大小设置为给定单位和 价值。有关可能的尺寸单位,请参阅TypedValue。相关 XML 属性

    android:textSize 参数

    unit 所需的尺寸单位。
    size 给定单位的所需大小。

    【讨论】:

    • 我只是在我的代码中的 Eclipse 中进行了双重检查,根据智能感知,我实际上有两个选项来设置文本大小、设置文本大小(浮点大小)、设置文本大小(整数单位、浮点大小)。您链接的文档证实了这一点。
    • 正确 - 你试过了吗? Nikolay 还说 2 会太小,请尝试增加。
    • 是的,但问题是,当我尝试按照我现在的方式进行操作时,文本甚至不显示。它只是一个空白屏幕。即使 2 不明显,为什么屏幕是空白的?
    • 它不是空白的。如果你看得很近,你可以看到红色的小像素:)。逐渐增大尺寸以查看。
    • 顺便说一下,setTextSize(float) 等价于 setTextSize(COMPLEX_UNIT_SP, float)。
    【解决方案2】:

    文本大小 2 将几乎不可见。至少尝试 14 次。顺便说一句,使用 xml 有很多优点,一旦你需要做比“Hello World”更复杂的事情,它会让你的生活更轻松。

    【讨论】:

    • 我将尝试使用 14。正如我在第一篇文章中所说 - 即使 2 太小,也不应该让我的屏幕空白吗?我想我是把它当作超出文本已经是的比例来阅读,而不是简单地设置大小。 - 我会看,但无论如何我会问 - 默认尺寸是多少?无论如何,谢谢。
    • btw - 是的,我意识到 xml 可以有它的优势,但我对它的经验为零。是的,我知道它可能很容易学习。由于我已经熟悉 java,我只是认为熟悉尽可能多的类真的很有用。似乎使用 XML 对你隐藏了很多。
    • 它并没有隐藏它——它是具有相同参数的相同类。需要一些时间才能在两者之间进行翻译,但实际上效率很高。另外,如果您在 XML 中定义视图,系统会处理不同的屏幕尺寸、密度和方向,无需更改您的代码,只需更改布局文件。
    • 您能否在运行时根据多种因素更改布局和方向?
    • 这是一个非常广泛的问题,但是,简而言之,是的。即使您在 XML 中定义 UI,您仍然可以在运行时添加/删除视图。您还可以覆盖默认行为并自己处理方向更改。
    【解决方案3】:

    TextView.setTextSize(int unit , float size); 方法有两个参数。

    试试这个:

    text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);
    

    参考this和this。

    更新: 现在setTextSize(float size) 将自动 以“scaled pixel”为单位设置文本大小。无需手动提及 COMPLEX_UNIT_SP。 参考documentation。

    【讨论】:

    • 这是正确答案。更具体地说:float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
    【解决方案4】:

    在我的案例中使用了这个方法:

    public static float pxFromDp(float dp, Context mContext) {
        return dp * mContext.getResources().getDisplayMetrics().density;
    }
    

    在此处以编程方式设置 TextView 的 TextSize:

    textView.setTextSize(pxFromDp(18, YourActivity.this));
    

    继续享受:)

    【讨论】:

    • 嗨@Dhruv Raval,我正在接受能够调整我项目中的字体大小,以防这个值 18 对任何屏幕密度都有效,或者我应该为每个屏幕密度创建一个尺寸屏幕?
    【解决方案5】:

    这为我解决了这个问题。 我在所有设备上都获得了统一的字体大小。

     textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));
    

    【讨论】:

    • R.dimen.font 是统一编号还是不同设备的大小不同?
    • 在调用 textView.setTextSize(R.dimen.text_size_max) 之后TextView消失了很奇怪,但是使用你的方法,它可以工作。
    【解决方案6】:

    目前,setTextSize(float size) 方法将运行良好,因此我们不需要使用其他方法来更改文本大小

    android.widget.TextView.java源代码

    /**
     * Set the default text size to the given value, interpreted as "scaled
     * pixel" units.  This size is adjusted based on the current density and
     * user font size preference.
     *
     * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
     *
     * @param size The scaled pixel size.
     *
     * @attr ref android.R.styleable#TextView_textSize
     */
    @android.view.RemotableViewMethod
    public void setTextSize(float size) {
        setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
    }
    

    使用示例

    textView.setTextSize(20); // set your text size = 20sp
    

    【讨论】:

    【解决方案7】:

    在 Kotlin 中,你可以像这样简单地使用,

    textview.textSize = 20f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2018-08-12
      • 1970-01-01
      • 2012-09-08
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多