TextView-以编程方式设置文本大小似乎不起作用


140

我正在使用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);
  }
}

Answers:


19

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


我将尝试使用14。正如我在第一篇文章中所说的那样-即使2太小,也不应该让我的屏幕空白吗?我想我正在阅读的内容超出了现有文本的范围,而不仅仅是设置大小。-我会看,但无论如何我都会问-默认大小是多少?不管怎样,谢谢。
cspam 2011年

顺便说一句-是的,我意识到xml可以发挥它的优势,但是我对此零经验。是的,我知道它可能很容易学习。正如我已经熟悉Java一样,我只是认为熟悉尽可能多的类确实很有用。似乎使用XML之类的东西对您隐藏了很多。
cspam 2011年

它不会隐藏它-它是具有相同参数的相同类。需要花费一些时间才能在两者之间进行翻译,但实际上效率很高。另外,如果您使用XML定义视图,则系统可以处理不同的屏幕尺寸,密度和方向,而无需更改代码,而无需更改布局文件。
Nikolay Elenkov 2011年

您是否可以在运行时基于多种因素来更改布局和方向?
cspam 2011年

这是一个非常广泛的问题,但是总之,是的。即使您以XML定义UI,您仍然可以在运行时添加/删除视图。您还可以覆盖默认行为并自行处理方向更改。
Nikolay Elenkov 2011年

533

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

试试这个 :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

参照这个这个

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


36
这是正确的答案。更具体地说: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin 2014年

2
非常感谢你!
DmitryKanunnikoff

72

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

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

R.dimen.font是统一编号还是不同设备的大小是否相同?
The_Martian's

在我的情况下,我在以下文件夹的文件dimen.xml中声明了字体:值,带有特定值的values-sw600dp,values-sw720dp。
维卡斯2015年

奇怪的是,在调用textView.setTextSize(R.dimen.text_size_max)之后,TextView消失了,但是使用您的方法,它可以工作。
li2

为我工作。谢谢!
apurv thakkar

24

当前,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


12

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

public void setTextSize(整数单位,浮点大小)

从以下版本开始:API级别1将默认文本大小设置为给定的单位和值。有关可能的尺寸单位,请参见TypedValue。相关的XML属性

android:textSize参数

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


1
我只是在代码中对Eclipse进行了仔细检查,根据智能感知,我实际上有两个选项可以设置setTextSize,setTextSize(float size),setTextSize(int unit,float size)。您链接的文档证实了这一点。
cspam 2011年

是的-您尝试过吗?另外,尼古拉(Nikolay)说2将会变得很小,也可以尝试增加。
杰克

是的,但是问题是,当我尝试以现在的方式进行操作时,文本甚至没有显示出来。它只是一个黑屏。即使2没引起注意,为什么屏幕还是空白?
cspam 2011年

这不是空白。如果看上去很近,您会看到红色的小像素:)。逐渐增加尺寸看。
Nikolay Elenkov 2011年

顺便说一下,setTextSize(float)等效于setTextSize(COMPLEX_UNIT_SP,float)。
Nikolay Elenkov 2011年

10

就我而言,使用此方法

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对任何屏幕密度都有效,还是应该为每个屏幕创建尺寸?
Armando Marques Sobrinho
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.