基本上我想在我的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,但这对我来说似乎是浪费精力和记忆。我相信这里出色的人才可以为此提出最佳解决方案。
非常感谢您的时间和帮助。
答案 0 :(得分:3)
答案 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#requestLayout
和TextView
来处理有关所需重绘或重新布局的所有正确通知。
此外,由于所有UI更改都在同一个线程上处理,因此您无需担心调用将更新UI的多个方法。这是因为有两个原因,第一,重写的执行在代码完成之前不会发生,其次,android内置了优化,将多个无效调用合并为一个。
因此,您唯一需要担心的是获得对Activity
实例的正确引用,然后您可以调用它上面的所有方法,使其显示您想要的内容。
由于您是手动而不是从xml创建View
,因此您需要通过调用Activity#setContentView
将根ViewGroup
添加到SpannableString
。
编辑:
然后,您需要了解SpannableStringBuilder
和Selecting, Highlighting, or Styling Portions of Text。这里有一些非常简短的文档:{{3}}
答案 4 :(得分:0)
您何时计划更新textview
?如果是单击按钮,则获取对textview
的引用,并在onClickListener()中更新文本,颜色等,无论您想要做什么。
在看到您的其他评论后,我认为SpannableString正是您所寻找的