我该如何在我的小部件中设置自定义字体?
可以有人给我展示一下如何设置这个字体的示例吗?
remoteViews.setTextViewText(R.id.text1,""+ days);
可以有人给我展示一下如何设置这个字体的示例吗?
remoteViews.setTextViewText(R.id.text1,""+ days);
android:typeface
来选择三种内置字体之一,但是你不能在 RemoteViews
中的 TextView
上使用自定义字体。Java方法 setTypeface()
用于指定 TextView
上的自定义字体,在 RemoteViews
中不可用。有两种解决方法可能会有所帮助。
1- 如果您仅能显示AppWidget设置的文本,则可以使用SpannableStrings和TypefaceSpans(以及Stylespans用于加粗等)来实现此目的。您可以使用常规的setTextViewText调用来设置SpannableString。
2- 如果您实际上需要更改TextView的字体系列,以便未来的文本显示为字体系列,则这更难。正如CommonsWare所述,您无法使用RemoteViews以编程方式设置任意字体系列。但是,如果您有一组较小的预定义字体(或字体重量,例如加粗等),则可以通过一种方法来实现此目的。这并不美观,但如果字体数量和变化相当受控制,则可以奏效。
在我的情况下,我正在使用TextClock创建一个时钟AppWidget。由于文本更新不受AppWidget控制,因此我无法使用SpannableStrings。我想提供6种内置字体选项。我在布局文件中创建了6个TextClock,每个都有不同的字体,在配置时只需使我想要的一个可见,其他的则"gone"。丑陋但有效。appwidget_layout.xml
<TextClock
android:id="@+id/clock_seconds_condensed"
android:fontFamily="sans-serif-condensed"
....
/>
<TextClock
android:visibility="gone"
android:id="@+id/clock_seconds_normal"
android:fontFamily="sans-serif"
....
/>
<TextClock
android:visibility="gone"
android:id="@+id/clock_seconds_black"
android:fontFamily="sans-serif-black"
....
/>
...
//Which font do we want? Choose that clock
val clockid = when (fontFamily) {
"san-serif" -> R.id.clock_seconds_normal
"sans-serif-light" -> R.id.clock_seconds_light
"sans-serif_black" -> R.id.clock_seconds_black
"sans-serif-thin" -> R.id.clock_seconds_thin
"sans-serif-medium" -> R.id.clock_seconds_medium
else -> R.id.clock_seconds_condensed
}
//Hide all the other clocks
if (clockid != R.id.clock_seconds_normal) views.setInt(R.id.clock_seconds_normal, "setVisibility", View.GONE)
if (clockid != R.id.clock_seconds_light) views.setInt(R.id.clock_seconds_light, "setVisibility", View.GONE)
if (clockid != R.id.clock_seconds_black) views.setInt(R.id.clock_seconds_black, "setVisibility", View.GONE)
if (clockid != R.id.clock_seconds_thin) views.setInt(R.id.clock_seconds_thin, "setVisibility", View.GONE)
if (clockid != R.id.clock_seconds_medium) views.setInt(R.id.clock_seconds_medium, "setVisibility", View.GONE)
if (clockid != R.id.clock_seconds_condensed) views.setInt(R.id.clock_seconds_condensed, "setVisibility", View.GONE)
//Set clock parameters
views.setInt(clockid, "setVisibility", View.VISIBLE)
....
试试这个,它可能会帮助你理解如何为你的textview
应用自定义字体效果
RemoteViews
。 - CommonsWare