如何在TextView中显示格式化文本?

时间:2017-09-01 22:59:26

标签: android textview

我想在TextView应用程序中添加大量格式化文本,但不知道如何... 我尝试将它添加到我的字符串资源文件但id没有工作.. ii做到了这一点 -

    <string name="some_text">Create stickers for Gboard on Google Play
01 September 2017
Posted by Alan Ni, Associate Product Manager, Gboard
Messaging is getting more and more expressive -- today you can say I love you 
    </string>

然后在活动......

TextView textView=(TextView) findViewById(R.id.some);
textView.setText(getString(R.string.some_text));

但它只是以相同的格式显示所有内容..我希望它以粗体显示标题并为事物添加颜色.. 基本上我想显示我们在MS Office中的写作方式

1 个答案:

答案 0 :(得分:9)

如果您想为文字添加样式,您可以选择一些选项。

最简单的方法是使用HTML标记。你必须用CDATA包裹它。

例如,您可以创建字符串:

<string name="some_text"><![CDATA[Create stickers for <b>Gboard</b>...]]></string>

然后要显示它,你可以这样做。

Spanned sp = Html.fromHtml( getString(R.string.some_text));
tv.setText(sp);

现在,更实际的方式是实际使用Android的风格。

您需要创建多个TextView,每个都有自己的样式,这样您就可以对文本的确切外观进行大量控制。

例如,这是一个你可以做类似的布局。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <!-- Creating a Title for your layout. -->
    <TextView
        style="@style/TextAppearance.AppCompat.Title" <!-- Title Style -->
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Create stickers for Gboard on Google Play"
         />
    <!-- Creating a subheader for your layout. -->
    <TextView
        style="@style/TextAppearance.AppCompat.Caption" <!-- Caption Style -->
        android:id="@+id/subheader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="01 September 2017"
         />

</LinearLayout>

对于您拥有的每种不同格式,您需要创建一个新的TextView,并应用正确的样式。

我建议坚持使用@style/TextAppearance.AppCompat...下的任何内容,因为这会为您提供一个非常好的文本大小/重量的起点。

您可以使用TitleCaptionBody2Body1等内容。

然后在路上,当你有更多使用样式的经验时,你可以开始创建自己的。

例如,假设我希望我的所有标题都是RED。您首先在styles.xml

中创建一个样式
<style name="myTitleStyle" parent="TextAppearance.AppCompat.Title">
    <item name="android:textColor">@color/red</item>
</style>

然后你可以将它用作以前的样式。

<!-- Creating a Title for your layout. -->
        <TextView
            style="@style/myTitleStyle" <!-- myTitleStyle Style -->
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Create stickers for Gboard on Google Play"
             />