Android - 两个句子,两个样式,一个TextView

sen*_*ior 9 layout android textview

我想显示一个包含两个句子的TextView,我希望它们像这样一个接一个:

AAAAAA: BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBB
Run Code Online (Sandbox Code Playgroud)

其中A ...是第一个单词\句子的一部分而B ...是第二个句子.

A ...&B ...的大小不是恒定的.

试过这样做:

    <RelativeLayout 
        style="@style/f13"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <TextView 
            android:id="@+id/first_text"
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="AAAAAA: " />    
    <TextView 
            style="@style/f15"
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
        android:layout_toRightOf="@id/first_text" />                
    </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

但我得到了:

AAAAAA: BBBBBBBBBBBBBBBBBBBBBBB
        BBBBBBBBB
Run Code Online (Sandbox Code Playgroud)

我希望第二个(B ...)句子继续在第一个句子下方(A ...)我应该添加句子A ...&B ...有不同的风格.

A的风格:

<style 
    name="f13">
    <item name="android:typeface">sans</item>
    <item name="android:textSize">15dp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@color/grey_dark_emperor</item>
</style>
Run Code Online (Sandbox Code Playgroud)

B的风格:

<style 
    name="f15">
    <item name="android:typeface">sans</item>
    <item name="android:textSize">17dp</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">@color/grey_dark_emperor</item>
</style>
Run Code Online (Sandbox Code Playgroud)

有什么想法吗 ?

Ale*_*xei 16

您可以尝试使用SpannableStringBuilder,如下所示:

String firstString = "AAAAAA: ";
String secondString = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";

SpannableStringBuilder stringBuilder = new SpannableStringBuilder(firstString + secondString);
stringBuilder.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, firstString.length(),
            Spannable.SPAN_INCLUSIVE_INCLUSIVE);
stringBuilder.setSpan(new ForegroundColorSpan(Color.rgb(255, 0, 0)), firstString.length() + 1,
            firstString.length() + secondString.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(stringBuilder);
Run Code Online (Sandbox Code Playgroud)

这将使第一个句子变为粗体,第二个句子变为红色.

  • 是的,您可以使用[TextAppearanceSpan](http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html)作为setpan函数的参数来设置文本颜色,大小,样式和字体. (2认同)