使用自定义字体创建数字时钟小部件
Creating A Digital Clock Widget With A Custom Font
我正在尝试创建一个带有自定义字体的数字时钟小部件。事实证明,这是我 Android 经历中最大的挑战。 (本以为tc.setTypeFace("whatever")
这么简单就搞定了)
最好的方法似乎是划掉 TextClock
并使用 ImageView
并使用自定义 AlarmManager
将位图传递给它以每秒为视图创建一个新图像.
在进入位图生成之前,我使用本教程 Alarm Manager Widget
在一个简单的 TextView
上进行了练习
我的问题是我无法每秒更新一次。我用
am.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis()+1000, 1000, pi);
但它仍然只每分钟左右更新一次(虽然不是每分钟的顶部)。我认为这与最近 OS(Kitkat、Lollipop)处理 AlarmManagers
.
的方式有关
我的问题是:
这样做正确吗?如果不是,请说明我应该怎么做。
如何让小部件每秒更新一次?
我遇到了同样的问题...
据我所知,您现在有 2 个选择:
- 最简单 - 如果您使用的是 API 级别 16 或更高级别,您只需在 xml 文件中添加
android:fontFamily="sans-serif-thin"
属性即可。
很有魅力!
这是我的 TextView:
<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" />
这是它的样子:
此方法的唯一缺点是可供选择的系统字体不多。
- 困难的方法是使用您自己的 Class, 像 that 一样扩展 TextView 对象,并在 xml 文件中定义它而不是普通的 TextView。
我不推荐它,因为它可能会出现错误。
编辑: 要每分钟更新一次小部件 - 您需要启动一个 Service,它可以每分钟(如果需要,也可以是每秒钟)更新您的时钟。
也检查 this example。
使用此 link 将 Textclock 降到 API 17 级以下。
你可以使用 .setTypeface(Typeface.createFromAsset(getAssets(),fonts/font.ttf"));
有了它。
对于API 17 或更高版本自定义字体,您需要为您想要的任何字体下载.ttf 文件,然后创建一个目录assets/fonts/ 然后保存您的字体
Typeface fonttype
fonttype = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotoregular.ttf");
textclock.setTypeface(fonttype);
我正在尝试创建一个带有自定义字体的数字时钟小部件。事实证明,这是我 Android 经历中最大的挑战。 (本以为tc.setTypeFace("whatever")
这么简单就搞定了)
最好的方法似乎是划掉 TextClock
并使用 ImageView
并使用自定义 AlarmManager
将位图传递给它以每秒为视图创建一个新图像.
在进入位图生成之前,我使用本教程 Alarm Manager Widget
在一个简单的TextView
上进行了练习
我的问题是我无法每秒更新一次。我用
am.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis()+1000, 1000, pi);
但它仍然只每分钟左右更新一次(虽然不是每分钟的顶部)。我认为这与最近 OS(Kitkat、Lollipop)处理 AlarmManagers
.
我的问题是:
这样做正确吗?如果不是,请说明我应该怎么做。
如何让小部件每秒更新一次?
我遇到了同样的问题... 据我所知,您现在有 2 个选择:
- 最简单 - 如果您使用的是 API 级别 16 或更高级别,您只需在 xml 文件中添加
android:fontFamily="sans-serif-thin"
属性即可。 很有魅力!
这是我的 TextView:
<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" />
这是它的样子:
此方法的唯一缺点是可供选择的系统字体不多。
- 困难的方法是使用您自己的 Class, 像 that 一样扩展 TextView 对象,并在 xml 文件中定义它而不是普通的 TextView。 我不推荐它,因为它可能会出现错误。
编辑: 要每分钟更新一次小部件 - 您需要启动一个 Service,它可以每分钟(如果需要,也可以是每秒钟)更新您的时钟。 也检查 this example。
使用此 link 将 Textclock 降到 API 17 级以下。 你可以使用 .setTypeface(Typeface.createFromAsset(getAssets(),fonts/font.ttf")); 有了它。
对于API 17 或更高版本自定义字体,您需要为您想要的任何字体下载.ttf 文件,然后创建一个目录assets/fonts/ 然后保存您的字体
Typeface fonttype
fonttype = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotoregular.ttf");
textclock.setTypeface(fonttype);