Creating A Digital Clock Widget With A Custom Font

流过昼夜 提交于 2019-12-18 14:57:21

问题


I'm trying to create a digital clock widget with a custom font. And this has proven to be the biggest challenge of my Android experience. (Thought it would be as simple as tc.setTypeFace("whatever") and be done with it)

The best way seems to be scratch the TextClock and use an ImageView and pass a Bitmap to it using a custom AlarmManager to create a new image for the view each second.

Before I get into the Bitmap generation, I practiced on a simple TextView using this tutorial Alarm Manager Widget

My problem is I can't this to update every second. I use am.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis()+1000, 1000, pi); but it still only updates it every minute or so (not at the top of every minute though). I think this has something to do with the way more recent OS (Kitkat, Lollipop) handle AlarmManagers.

My questions are:

  1. Is this the right way to go about doing this? If not, please explain what I should do.

  2. How can I get the widget to update every second?


回答1:


I had the same problem... You have 2 options as I know till now:

  1. The easiest - If you are using API level 16 or higher you can simply add android:fontFamily="sans-serif-thin" attribute for example in your xml file. Works like a charm!

This is my 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" />

And this is how it looks like:

The only disadvantage of this method is that there isn't large selection of system fonts you can use.

  1. The hard way is just to use your own Class, witch extends the TextView object like that and define it instead normal TextView in your xml file. I do not recommend it because it is possible to appear bugs.

Edit: For updating the widget every minute - you need to start a Service which can update your clock each minute (or second if you want). Check this example too.




回答2:


Use this link to get Textclock below API level 17. You could use .setTypeface(Typeface.createFromAsset(getAssets(),fonts/font.ttf")); with it.




回答3:


For API 17 or higher to customize fonts, you need to download .ttf file for any fonts you want then create a directory assets/fonts/ then save your fonts

Typeface fonttype
fonttype = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotoregular.ttf");
textclock.setTypeface(fonttype);


来源:https://stackoverflow.com/questions/31360837/creating-a-digital-clock-widget-with-a-custom-font

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!