资源字符串颜色在 Android 中无法以编程方式工作
Resource String Color not working programmatically in Android
string.xml
这是我的字符串
<string name="bullet_text"><font color="#38d98a">●</font>\t\tCucumber Detox Water (1 glass)\n<font color="#38d98a">●</font>\t\tSkimmed Milk (1 glass)\n<font color="#38d98a">●</font>\t\tPeas Poha (1.5 katori)</string>
当这个字符串在 xml 中使用时它工作得很好但是当以编程方式使用这个字符串时它就不起作用
xml代码
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bullet_text"
android:textSize="20sp"
android:layout_margin="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
工作完美
Kotlin 代码
val textView:TextView = findViewById(R.id.textView)
textView.text = getString(R.string.bullet_text)
工作不完美
You can use custom style instead of string
<style name="CustomFontStyle">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:capitalize">characters</item>
<item name="android:typeface">monospace</item>
<item name="android:textSize">12pt</item>
<item name="fontFamily">your font</item>
<item name="android:textColor">#38d98a</item>/>
</style>
现在可以使用答案在这里感谢@ADM 和@Rasheed 的评论帮助
strings.xml
<string name="bullet_text"><![CDATA[<font color="#38d98a">●</font>\t\tCucumber Detox Water (1 glass)<br/><font color="#38d98a">●</font>\t\tSkimmed Milk (1 glass)<br/><font color="#38d98a">●</font>\t\tPeas Poha (1.5 katori)]]></string>
Kotlin 代码
val textView: TextView = findViewById(R.id.textView)
textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(getString(R.string.hello_worldRed), Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(getString(R.string.hello_worldRed))
}
输出
您可以使用 SpannableString 在您的字符串前设置项目符号:
val string = SpannableString("Text with\nBullet point")
string.setSpan(
BulletSpan(40, Color.GREEN, 20),
10,
22,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.textView.text = string
这是结果
另请参阅->BulletSpan
更新
if (Build.VERSION.SDK_INT >= 28) {
val string = SpannableString("Text with\nBullet point")
string.setSpan(
BulletSpan(40, Color.GREEN, 20),
10,
22,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.textView.text = string
}else {
// your own code
}
string.xml 这是我的字符串
<string name="bullet_text"><font color="#38d98a">●</font>\t\tCucumber Detox Water (1 glass)\n<font color="#38d98a">●</font>\t\tSkimmed Milk (1 glass)\n<font color="#38d98a">●</font>\t\tPeas Poha (1.5 katori)</string>
当这个字符串在 xml 中使用时它工作得很好但是当以编程方式使用这个字符串时它就不起作用
xml代码
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bullet_text"
android:textSize="20sp"
android:layout_margin="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
工作完美
Kotlin 代码
val textView:TextView = findViewById(R.id.textView)
textView.text = getString(R.string.bullet_text)
工作不完美
You can use custom style instead of string
<style name="CustomFontStyle">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:capitalize">characters</item>
<item name="android:typeface">monospace</item>
<item name="android:textSize">12pt</item>
<item name="fontFamily">your font</item>
<item name="android:textColor">#38d98a</item>/>
</style>
现在可以使用答案在这里感谢@ADM 和@Rasheed 的评论帮助
strings.xml
<string name="bullet_text"><![CDATA[<font color="#38d98a">●</font>\t\tCucumber Detox Water (1 glass)<br/><font color="#38d98a">●</font>\t\tSkimmed Milk (1 glass)<br/><font color="#38d98a">●</font>\t\tPeas Poha (1.5 katori)]]></string>
Kotlin 代码
val textView: TextView = findViewById(R.id.textView)
textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(getString(R.string.hello_worldRed), Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(getString(R.string.hello_worldRed))
}
输出
您可以使用 SpannableString 在您的字符串前设置项目符号:
val string = SpannableString("Text with\nBullet point")
string.setSpan(
BulletSpan(40, Color.GREEN, 20),
10,
22,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.textView.text = string
这是结果
另请参阅->BulletSpan
更新
if (Build.VERSION.SDK_INT >= 28) {
val string = SpannableString("Text with\nBullet point")
string.setSpan(
BulletSpan(40, Color.GREEN, 20),
10,
22,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.textView.text = string
}else {
// your own code
}