如何在 android 复杂功能中更改文本字体
How to change text font in android complication
Android 文档说 androidx.wear.watchface.complications.rendering.ComplicationDrawable
具有 textTypeface 和 titleTypeface 属性。但是我没有找到如何使用它的信息。
我试图将字体资源、字体系列资源传递到那里,但没有效果。我需要传递什么才能生效?
是否可以更改 Drawable complication
中的字体样式?
虽然无法更改字体本身(据我所知),但您可以更改字体。如果您在 GitHub 上查看 Google 的表盘示例项目,您可以在 drawable 文件夹中找到一些复杂功能样式。在这里您将看到如何更改字体的示例:
app:textTypeface="sans-serif-condensed"
app:titleTypeface="sans-serif-condensed"
我无法找到所有可用选项的完整 up-to-date 列表,但过去曾为 Roboto 工作的一些选项是:
"sans-serif"
"sans-serif-light"
"sans-serif-condensed"
"sans-serif-black"
"sans-serif-thin"
"sans-serif-medium"
可以为并发症应用自定义字体。
这是我得到它的方法(在给你带来并发症之前使用它 - 当调用 complication.render(canvas, zonedDateTime, renderParameters)
时):
ComplicationDrawable.getDrawable(context, complicationStyle)?.apply {
activeStyle.run {
//... other attributes
setTextTypeface(ResourcesCompat.getFont(context!!, R.font.your_font_resource)!!)
}
(complication.renderer as CanvasComplicationDrawable).drawable = this
}
我知道这不是最好的实现,但它正在运行(使用 android 11、galaxy watch 4 one ui 4.0 测试)
在Java中,您可以按如下方式更改字体、文字颜色和背景颜色:
private final Typeface mExoBold = ResourcesCompat.getFont(getApplicationContext(), R.font.exo_semibold);
complicationDrawable.setTextTypefaceActive(mExoBold);
complicationDrawable.setTextColorActive(Color.YELLOW);
complicationDrawable.setBackgroundColorActive(Color.argb(0xFF, 0x20, 0x20, 0x20));
不过,我还没有找到以这种方式更改字体大小的方法。如果您想 完全 重新格式化并发症,如果您使用的是 Java 中的旧并发症库,请尝试以下操作:
ComplicationText compTitle = null, compText = null;
String title = "", text = "";
if (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT) {
compTitle = complicationData.getShortTitle();
compText = complicationData.getShortText();
}
else if (complicationData.getType() == ComplicationData.TYPE_LONG_TEXT) {
compTitle = complicationData.getLongTitle();
compText = complicationData.getLongText();
}
if (compTitle != null) {
try {
title = compTitle.getText(context, currentTimeMillis()).toString();
} catch (Exception unused) {
title = "";
}
}
if (compText != null) {
try {
text = compText.getText(context, currentTimeMillis()).toString();
} catch (Exception unused) {
text = "";
}
}
现在您已经在字符串变量中获得了文本值,您可以以任何您喜欢的方式显示它们(是的,我知道 ComplicationText 已被弃用,但话又说回来,ComplicationData 也是如此;我还没有还想出了如何在 Java).
中使用新的复杂功能库
Android 文档说 androidx.wear.watchface.complications.rendering.ComplicationDrawable
具有 textTypeface 和 titleTypeface 属性。但是我没有找到如何使用它的信息。
我试图将字体资源、字体系列资源传递到那里,但没有效果。我需要传递什么才能生效?
是否可以更改 Drawable complication
中的字体样式?
虽然无法更改字体本身(据我所知),但您可以更改字体。如果您在 GitHub 上查看 Google 的表盘示例项目,您可以在 drawable 文件夹中找到一些复杂功能样式。在这里您将看到如何更改字体的示例:
app:textTypeface="sans-serif-condensed"
app:titleTypeface="sans-serif-condensed"
我无法找到所有可用选项的完整 up-to-date 列表,但过去曾为 Roboto 工作的一些选项是:
"sans-serif"
"sans-serif-light"
"sans-serif-condensed"
"sans-serif-black"
"sans-serif-thin"
"sans-serif-medium"
可以为并发症应用自定义字体。
这是我得到它的方法(在给你带来并发症之前使用它 - 当调用 complication.render(canvas, zonedDateTime, renderParameters)
时):
ComplicationDrawable.getDrawable(context, complicationStyle)?.apply {
activeStyle.run {
//... other attributes
setTextTypeface(ResourcesCompat.getFont(context!!, R.font.your_font_resource)!!)
}
(complication.renderer as CanvasComplicationDrawable).drawable = this
}
我知道这不是最好的实现,但它正在运行(使用 android 11、galaxy watch 4 one ui 4.0 测试)
在Java中,您可以按如下方式更改字体、文字颜色和背景颜色:
private final Typeface mExoBold = ResourcesCompat.getFont(getApplicationContext(), R.font.exo_semibold);
complicationDrawable.setTextTypefaceActive(mExoBold);
complicationDrawable.setTextColorActive(Color.YELLOW);
complicationDrawable.setBackgroundColorActive(Color.argb(0xFF, 0x20, 0x20, 0x20));
不过,我还没有找到以这种方式更改字体大小的方法。如果您想 完全 重新格式化并发症,如果您使用的是 Java 中的旧并发症库,请尝试以下操作:
ComplicationText compTitle = null, compText = null;
String title = "", text = "";
if (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT) {
compTitle = complicationData.getShortTitle();
compText = complicationData.getShortText();
}
else if (complicationData.getType() == ComplicationData.TYPE_LONG_TEXT) {
compTitle = complicationData.getLongTitle();
compText = complicationData.getLongText();
}
if (compTitle != null) {
try {
title = compTitle.getText(context, currentTimeMillis()).toString();
} catch (Exception unused) {
title = "";
}
}
if (compText != null) {
try {
text = compText.getText(context, currentTimeMillis()).toString();
} catch (Exception unused) {
text = "";
}
}
现在您已经在字符串变量中获得了文本值,您可以以任何您喜欢的方式显示它们(是的,我知道 ComplicationText 已被弃用,但话又说回来,ComplicationData 也是如此;我还没有还想出了如何在 Java).
中使用新的复杂功能库