14

我正在尝试使用自定义字体创建一个数字时钟小部件。这已被证明是我的 Android 体验中最大的挑战。(认为​​它会像它一样简单tc.setTypeFace("whatever")并完成)

最好的方法似乎是从头开始TextClock使用ImageView并使用自定义将位图传递给它,以AlarmManager每秒为视图创建一个新图像。

在我进入位图生成之前,我TextView使用本教程练习了一个简单的警报管理器小部件

我的问题是我不能每秒更新一次。我使用 am.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis()+1000, 1000, pi);但它仍然只每分钟左右更新一次(虽然不是每分钟的顶部)。我认为这与最近的操作系统(Kitkat、Lollipop)处理AlarmManagers.

我的问题是:

  1. 这是做这件事的正确方法吗?如果没有,请解释我应该怎么做。

  2. 如何让小部件每秒更新一次?

4

3 回答 3

4

我有同样的问题......到目前为止,我知道你有两个选择:

  1. 最简单的 - 如果您使用 API 级别 16 或更高级别,您可以简单地添加android:fontFamily="sans-serif-thin"属性,例如在您的 xml 文件中。奇迹般有效!

这是我的文本视图:

<TextView
   android:id="@+id/Time"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:ellipsize="none"
   android:fontFamily="sans-serif-thin"
   android:gravity="center_vertical|center_horizontal"
   android:includeFontPadding="false"
   android:singleLine="true"
   android:text="12:01"
   android:textColor="#fff"
   android:textSize="80sp" />

这就是它的样子:

在此处输入图像描述

这种方法的唯一缺点是您可以使用的系统字体选择不多。

  1. 困难的方法就是使用你自己的类,像这样扩展 TextView 对象并在你的 xml 文件中定义它而不是普通的 TextView。我不推荐它,因为它可能会出现错误。

编辑:为了每分钟更新一次小部件 - 您需要启动一项服务,该服务可以每分钟更新您的时钟(或者如果需要,可以每秒更新时钟)。也检查这个例子

于 2015-07-18T14:05:44.143 回答
3

使用此链接获取低于 API 级别 17 的 Textclock。您可以使用 .setTypeface(Typeface.createFromAsset(getAssets(),fonts/font.ttf")); 。

于 2015-07-23T10:38:31.810 回答
2

对于 API 17 或更高版本来自定义字体,您需要为您想要的任何字体下载 .ttf 文件,然后创建目录 assets/fonts/ 然后保存您的字体

在此处输入图像描述

Typeface fonttype
fonttype = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotoregular.ttf");
textclock.setTypeface(fonttype);
于 2015-07-24T04:18:59.640 回答