android textclock设置fontfamily不起作用

时间:2017-08-02 15:01:41

标签: android widget remoteview

我读了这页https://developer.android.com/preview/features/fonts-in-xml.html textview没问题,但是textclock不起作用。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.hellokai.myapplication.MainActivity">

    <TextClock
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/oswald_stencbab"
        android:format12Hour="hh:mm"
        android:format24Hour="hh:mm"
        android:textSize="60dp"
        android:text="hello"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:textSize="60dp"
        android:text="@string/app_name"
        android:fontFamily="@font/oswald_stencbab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

enter image description here

如何让TextClock像TextView一样工作?

我在一个小部件中编写TextClock,remoteview无法获取TextClock实例。我将更改TextClock字体,但我不知道如何更改它。

希望有人能帮助我解决这个问题。

2 个答案:

答案 0 :(得分:0)

我将我的字体保存在assets / fonts文件夹中。然后我做了以下事情。

Typeface typeFaceBlack = Typeface.createFromAsset(context.getAssets(), "fonts/Font.otf");
textClockID.setTypeface(typeFaceBlack);

答案 1 :(得分:0)

您需要创建自己的自定义时钟,而不是使用内置的textclock。

为此:

const allComputedValues$ = array$.pipe(
  scan(
    (acc, crtArr) => {
      // with these we 'automatically' remove the current items(from `acc`) whose ids are not in the current array
      const newIds = {};
      const newValues = {};

      crtArr.forEach(crt => {
        const { id: currentId, value: crtValue } = crt;

        // if new or edited
        if (!acc.ids[currentId] || acc.values[currentId] !== crtValue) {
          newIds[currentId] = true;
          newValues[currentId] = veryExpensiveCalc(crtValue);
        }
      });

      return { ids: newIds, values: newValues };
    },
    { ids: {}, values: {} },
  ),
)

然后获取小时和分钟:

import java.util.Calendar;

最后在两个单独的TextView上同时设置小时和分钟,然后应用字体