Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating A Digital Clock Widget With A Custom Font

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?

like image 586
David Small Avatar asked Jul 11 '15 19:07

David Small


People also ask

Can I get a digital clock widget?

Digital clock widget comes to your Android phone to display the time and date clearly on your background. This clock gives you an alternative look for Android, letting your phone stand out amongst the rest.


1 Answers

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:

enter image description here

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.

like image 123
Nikolay Hristov Avatar answered Sep 16 '22 18:09

Nikolay Hristov