有没有办法更改窗口小部件中的字体?我在这里看到了一些问题/答案,但有些人说它无法完成。其他人说它可以做到但不提供太多信息。我说的是我放在资源文件夹中的自定义字体。我想要使用的字体是设计指南中的Roboto。
我主要想问一下,因为其他问题表明这是不可能的。我的Nexus 7上有Google Currents小部件,它在小部件上使用Roboto字体,所以肯定有可能吗?
我想改变的TextView很好,只是一个textview。目前它没有格式/样式。我唯一需要的是将字体改为Roboto light。
我很感激有关如何做到这一点的一些建议。谢谢。
我实际上计划开源我在这里制作的小部件,这样它也可以帮助其他人。
答案 0 :(得分:9)
有没有办法更改小部件中的字体?
是的,但不幸的是你只能使用系统字体。你可以在Android 4.1+上原生使用Roboto字体,但是:
android:fontFamily="sans-serif" // roboto regular
android:fontFamily="sans-serif-light" // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
在Text的早期版本中使用Roboto的唯一方法是创建一个Bitmap并在Canvas上绘制Text,如下所示:
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);
然后将其设置为RemoteView
:
rViews.setImageViewBitmap(R.id.myImageView, myBitmap);
答案 1 :(得分:-1)
首先在您的资源文件夹中创建一个子文件夹(字体)。 将您的字体(yourfont.ttf)添加到子文件夹。 然后使用以下代码:
Typeface type = Typeface.createFromAsset(getAssets(),"fonts/yourfont.ttf");
widgetyour.setTypeface(type);