如何使用 TextView 在 android 中设置动态文本样式

问题描述 投票:0回答:1

我正在使用 XML 设计来显示以以下格式动态创建的文本

Details
    1. ESN: 0-4638929
    2. HW Address: E4:EE:D8:25:44:A3
    3. Hardware Version: 1
    4. Manufacturing Date: Fri Apr 20 16:27:00 GMT+05:30 2018
    5. Application: 2.14.5
    6. UUID: 9499542

Current Device Details
    1. Manufacturer: motorola
    2. Model: motorola edge 20 fusion
    3. OS Version: 12
    4. Screen Dimensions: 1080x2275
    5. Screen Density: 400 dpi
    6. Device Locale: English (India)
    7. Network Type: Mobile Data
    8. App Version: 1.5.4 (1132)

Diagnostics
    1. DDM: 0

ASIC Bootloader
    1. Version: 3

Transmit Power
    1. Transmit Power: 232
    

我正在使用 TextView 来显示文本

 <TextView
                            android:id="@+id/consoleTextView"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:fontFamily="@font/roboto_regular"
                            app:fontFamily="@font/roboto_regular"
                            android:gravity="start|top"
                            android:textSize="13sp"
                            android:text="@string/formatted_text"
                            android:layout_marginTop="10dp"
                            android:autoLink="web"
                            android:textColor="@color/secondary_text_color" />

我正在尝试以不同类型/颜色/字体大小等的标题及其列表项具有不同颜色的方式设置以下文本的样式。此外,列表项文本的换行方式应确保长文本不应在编号之前开始。

我尝试定义一些硬编码字符串来实现此目的,但不确定如何动态生成它,因为多个标题和列表项不固定并且可以扩展到很多。

  <string name="formatted_text">
    <b>Diagnostics</b>\n
      1. DDM: 0\n\n

    <b>ASIC Bootloader</b>\n
      1. Version: 3\n\n

    <b>Operational Temperature Limits</b>\n
      1. Temp Charge Low: 0\n
      2. Temp Charge High: 65\n
      3. Temp Discharge Low: -5\n
      4. Temp Discharge High: 70\n\n

    <b>Query Hardware Version</b>\n
      1. Device Code: 1\n
      2. Silicon Revision: 144\n
      3. CPU Revision: 98\n
      4. Radio Revision: 98\n

</string>

android xml android-layout
1个回答
0
投票

您可以使用

Spans
在运行时实现此目的。

https://developer.android.com/develop/ui/views/text-and-emoji/spans#android-ktx

如果您使用 Kotlin,则有 androidx.core KTX 包可以让您执行类似的操作。

    val string = buildSpannedString {
      bold {
        append("Diagnostics")
      }
      appendLine()
      append("1. DDM: 0")

      bold {
        color(Color.BLUE) {
          append("ASIC Bootloader")
        }
      }

      // more code
    }

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.