Android:静态地在TextView中强调动态文本

时间:2011-01-12 21:04:31

标签: android underline

我想让TextView完全加下划线,但我不能使用文本资源和<u>标记,因为它是动态文本。

  

相关:Can I underline text in an android layout?

到目前为止,我知道这样做的唯一方法是在运行时。这真的是唯一的方法吗?有没有办法在XML文件中做到这一点?

5 个答案:

答案 0 :(得分:18)

最简单的解决方案可能是创建一个派生自TextView的自定义UnderLineTextView组件,覆盖setText()并将整个文本设置为带下划线的内容,如下所示(来自上面提到的链接的下划线代码):

@Override
public void setText(CharSequence text, BufferType type) {
    // code to check text for null omitted
    SpannableString content = new SpannableString(text);
    content.setSpan(new UnderlineSpan(), 0, text.length(), 0);
    super.setText(content, BufferType.SPANNABLE);

}

这只是在布局中使用新组件并像往常一样设置文本的问题。其余的是自动处理的。

有关自定义组件的更多信息: http://developer.android.com/guide/topics/ui/custom-components.html

答案 1 :(得分:14)

您可以在Html.fromHtml(String source)

上加下划线

示例:

textView.setText(Html.fromHtml("this is <u>underlined</u> text"));

答案 2 :(得分:1)

如果您愿意,也可以通过/res/values/string.xml文件执行此操作:例如,在/res/values/string.xml中,您可以添加以下条目:

<string name="createAccount"><u>Create Account</u></string>

然后在您的活动的onCreate(Bundle savedInstanceState)方法中,您将添加以下代码以导致“创建帐户”&gt;在您为/res/layout/的xml文件中为您的活动定义的createAccountText TextView设置的UI中显示为下划线:

TextView createAccountText = (TextView) findViewById(R.id.createAccountText);
Resources res = getResources();
CharSequence styledText = res.getText(R.string.createAccount);
createAccountText.setText(styledText, TextView.BufferType.SPANNABLE);

答案 3 :(得分:0)

peter3之前写过扩展TextView类并覆盖setText方法。

此解决方案无效,因为setText方法标记为FINAL。

http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

不确定代码是否可以进行一些修改。

答案 4 :(得分:0)

 SpannableString content = new SpannableString(name);
 content.setSpan(new UnderlineSpan(), 0, name.length(), 0);
 geometrical_textview.setText(content, TextView.BufferType.SPANNABLE);