Android中如何实现TextView多行文本的易维护编写?
第一种写法无法生效的原因
Android 布局使用的 XML 语法本身不支持 Python/Kivy 生态里的三引号多行字符串规则。XML 中属性值只能用成对的单引号/双引号包裹,解析器遇到第二个匹配的引号就会判定属性值结束,你写的三引号会被识别为语法错误,自然无法正常运行。
类似多行字符串的实现方案
不需要更换 TextView 组件,也无需额外添加特殊属性,推荐两种符合 Android 开发规范、且可读性和可维护性都很高的写法:
方案1:将长文本存入字符串资源文件(官方推荐)
Android 推荐将所有文本内容统一存放在 res/values/strings.xml 资源文件中,你可以直接在该文件中编写多行文本:
<string name="oncreate_desc"> onCreate(): 当Activity首次被创建时由系统调用\n 你可以在这里初始化所有UI元素或数据对象\n 你还可以获取Activity的savedInstanceState参数,其中包含了之前保存的状态,你可以通过该参数恢复之前的页面状态 </string>
之后在布局文件中直接引用该资源即可:
<TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="68dp" android:text="@string/oncreate_desc" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" />
方案2:代码中使用多行字符串赋值
如果你使用 Kotlin 开发,Kotlin 本身就支持三引号多行字符串,和你之前 Kivy 的使用习惯几乎一致:
val lifecycleDesc = """ onCreate(): 当Activity首次被创建时由系统调用 你可以在这里初始化所有UI元素或数据对象 你还可以获取Activity的savedInstanceState参数,其中包含了之前保存的状态,你可以通过该参数恢复之前的页面状态 """.trimIndent() findViewById<TextView>(R.id.textView).text = lifecycleDesc
补充说明
TextView 默认就支持多行文本展示,如果需要控制最大行数可以添加 android:maxLines 属性,不需要更换其他文本组件。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

