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

Pra*_*mar 2 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>
Run Code Online (Sandbox Code Playgroud)

然后在活动......

TextView textView=(TextView) findViewById(R.id.some);
textView.setText(getString(R.string.some_text));
Run Code Online (Sandbox Code Playgroud)

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

Adv*_*Dog 11

如果您想要设置文本样式,您可以选择一些选项.


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

例如,您可以创建String:

<string name="some_text"><![CDATA[Create stickers for <b>Gboard</b>...]]></string>
Run Code Online (Sandbox Code Playgroud)

然后要显示它,你可以做到这一点.

Spanned sp = Html.fromHtml( getString(R.string.some_text));
tv.setText(sp);
Run Code Online (Sandbox Code Playgroud)

现在,实际使用Android的样式将更加强大.

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

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

<?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>
Run Code Online (Sandbox Code Playgroud)

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

我建议坚持使用任何东西@style/TextAppearance.AppCompat...,因为这将为你提供一个非常好的文本大小/重量的起点.

您可以使用这样的东西Title,Caption,Body2,Body1,等等.


然后在路上,当您对Styles有更多经验时,您可以开始创建自己的.

例如,假设我想要所有的标题RED.首先在其中创建一个Stylestyles.xml

<style name="myTitleStyle" parent="TextAppearance.AppCompat.Title">
    <item name="android:textColor">@color/red</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

<!-- 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"
             />
Run Code Online (Sandbox Code Playgroud)