使用TextView动态显示文本(Android)

时间:2011-01-19 04:36:55

标签: java android android-layout textview

基本上我想在我的Android应用程序中做的是使用TextView一次显示两个不同的文本。所以在代码中,我希望能够做到这样的事情:

    LinearLayout ll = new LinearLayout(this);
    TextView text = new TextView(this);
    text.setTextColor(0xFF000000);
    text.setGravity(Gravity.CENTER_HORIZONTAL);
    text.setTextSize(20f);
    text.setText("Text1");
    text.setTextSize(14f);
    text.setColor(0xFF0000FF);
    text.setText("\nText2");
    ll.addView(text);

为了澄清,我试图只使用一个TextView一次显示黑色“Text1”和蓝色“Text2”。显然,使用上面的代码无法解决这个问题。我考虑使用第二个TextView,但这对我来说似乎是浪费精力和记忆。我相信这里出色的人才可以为此提出最佳解决方案。

非常感谢您的时间和帮助。

5 个答案:

答案 0 :(得分:3)

您有两种选择。

一个是

Spannable

和其他是

fromHtml (String source)

这样你就可以获得所需的输出。

答案 1 :(得分:1)

我认为使用当前版本的代码,您只能看到最新的文本(Text2)。 如果你想要有两个文本的多个外观,我建议使用2个单独的TextViews。它会增加灵活性。

如果您以后不打算更改此UI代码,则可以在setText()调用中考虑Html.toHtml()。

答案 2 :(得分:0)

似乎问题在于:

LinearLayout.addView(text);

您正在尝试将视图添加到LinearLayout,但布局不存在(在当前活动中)。您需要将TextView添加到您正在使用的.xml中定义的布局中。假设你在xml文件“activity1.xml”中有一个ID为“linearlayout01”的LinearLayout,你可以这样做:

setContentView(R.layout.activity1);

// Create and adjust TextView text

...

LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout01);
layout.addView(text);

答案 3 :(得分:0)

View添加到ViewGroup LinearLayout的后代View#invalidate后,您无需读取它即可更新其显示内容。如果您对要求更改其显示的视图执行任何更改,则会通过在适当的位置调用View#requestLayoutTextView来处理有关所需重绘或重新布局的所有正确通知。

此外,由于所有UI更改都在同一个线程上处理,因此您无需担心调用将更新UI的多个方法。这是因为有两个原因,第一,重写的执行在代码完成之前不会发生,其次,android内置了优化,将多个无效调用合并为一个。

因此,您唯一需要担心的是获得对Activity实例的正确引用,然后您可以调用它上面的所有方法,使其显示您想要的内容。

由于您是手动而不是从xml创建View,因此您需要通过调用Activity#setContentView将根ViewGroup添加到SpannableString

编辑:

然后,您需要了解SpannableStringBuilderSelecting, Highlighting, or Styling Portions of Text。这里有一些非常简短的文档:{{3}}

答案 4 :(得分:0)

您何时计划更新textview?如果是单击按钮,则获取对textview的引用,并在onClickListener()中更新文本,颜色等,无论您想要做什么。

在看到您的其他评论后,我认为SpannableString正是您所寻找的