问题
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:
Is this the right way to go about doing this? If not, please explain what I should do.
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:
- 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.
- 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