6

如何在我的小部件中设置自定义字体?

remoteViews.setTextViewText(R.id.text1,""+ days);

有人可以向我展示如何为此设置字体的示例吗?

4

3 回答 3

11

如何在我的小部件中设置自定义字体?

你没有。您可以通过 选择布局 XML 中的三种内置字体之一android:typeface,但不能在 a 中使用带有 a 的自定义TextView字体RemoteViewssetTypeface(),用于在 a 上指定自定义字体的 Java 方法TextView不适用于RemoteViews

于 2012-11-15T17:58:07.670 回答
0

有两种解决方法可能会有所帮助。

1 - 如果您只能显示 AppWidget 自己设置的文本,则可以使用 SpannableStrings 和TypefaceSpans来执行此操作(以及用于粗体的Stylespans等)。您可以使用普通的setTextViewText调用设置 SpannableString。

2 - 如果您确实需要更改 TextView 的字体系列,以便将来的文本与字体系列一起显示,这更难。正如 CommonsWare 所提到的,您不能使用 RemoteViews 以编程方式设置任意字体系列。但是,如果您有一组较小的预定义字体(或粗体等字体粗细),则有一种方法可以做到这一点。它并不漂亮,但如果字体和变体的数量得到适当控制,它就可以工作。

就我而言,我正在使用 TextClock 创建一个时钟 appwidget。因为文本更新不受 AppWidget 控制,所以我无法使用 SpannableStrings。我想提供 6 种内置字体选项。我在我的布局文件中创建了 6 个 TextClock,每个都有不同的字体,并简单地使我想要的一个可见,而其他的在配置时“消失”。丑陋但有效。所以:

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)
....
于 2018-12-07T22:30:58.180 回答
-3

试试这个,它可能会帮助您了解如何申请custom font effects您的textview

使用这个例子你肯定会得到想法

于 2012-11-15T17:56:50.453 回答