RED_
RED_

Reputation: 3007

Changing the font of a textview within a widget?

Is there a way to change the font in a widget? I've seen some questions/answers on here but some say it can't be done. Others say it can be done but then don't provide much information. I'm talking about a custom font that I put in my assets folder. The font I want to use is Roboto from the design guidelines.

I mostly want to ask because of the other questions stating it isn't possible. I have the Google Currents widget on my Nexus 7 that uses the Roboto font on it's widget so surely it is possible?

The TextView I want to change is well, just a textview. It has no formatting/styles on it at the moment. The only thing I really need is the font changed to Roboto light.

I would appreciate some advice on how to do this. Thanks.

I actually plan on open sourcing the widget I am making here so it could help others too.

Upvotes: 4

Views: 5258

Answers (1)

Ahmad
Ahmad

Reputation: 72553

Is there a way to change the font in a widget?

Yes, but unfortunately you can only use the system fonts. You can use the Roboto fonts natively on Android 4.1+ like this though:

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed

The only way to use Roboto on previous versions for your Text would be to create a Bitmap and draw your Text on Canvas like this:

    Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas myCanvas = new Canvas(myBitmap);
    Paint paint = new Paint();
    Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/myFont.ttf");

    paint.setTypeface(font);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(...);
    paint.setTextSize(...);
    myCanvas.drawText("Hello World", x, y, paint);

And then set it like this to your RemoteView:

rViews.setImageViewBitmap(R.id.myImageView, myBitmap);

Upvotes: 9

Related Questions