为了账号安全,请及时绑定邮箱和手机立即绑定

如何在小部件中使用自定义字体?

如何在小部件中使用自定义字体?

有只小跳蛙 2019-10-09 15:11:08
我有一个数字时钟小部件。如何在显示时钟的textview中使用资产/字体中的自定义字体作为默认字体?这是我的代码:    package android.tristan.widget.digiclock;import java.util.Calendar;import android.app.PendingIntent;import android.app.Service;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.IBinder;import android.os.Vibrator;import android.text.format.DateFormat;import android.widget.RemoteViews;public class DigiClock extends AppWidgetProvider {    @Override    public void onDisabled(Context context) {        super.onDisabled(context);        context.stopService(new Intent(context, UpdateService.class));    }    public void onReceive(Context context, Intent intent)    {        super.onReceive(context, intent);        if(intent.getAction().equals("android.tristan.widget.digiclock.CLICK"))        {          Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);          vibrator.vibrate(50);                       final Intent alarmClockIntent = new Intent(Intent.ACTION_MAIN, null);            alarmClockIntent.addCategory(Intent.CATEGORY_LAUNCHER);            final ComponentName cn = new ComponentName("com.android.deskclock", "com.android.deskclock.AlarmClock");            alarmClockIntent.setComponent(cn);            alarmClockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            context.startActivity(alarmClockIntent);        }        if(intent.getAction().equals("android.tristan.widget.digiclock.CLICK_2"))        }    }
查看完整描述

3 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我对度量大小进行了一些更改,因此位图将支持不同的字体大小。它仅支持单行文本。


public static Bitmap getFontBitmap(Context context, String text, int color, float fontSizeSP) {

    int fontSizePX = convertDiptoPix(context, fontSizeSP);

    int pad = (fontSizePX / 9);

    Paint paint = new Paint();

    Typeface typeface = Typeface.createFromAsset(context.getAssets(), "Fonts/Roboto-Regular.ttf");

    paint.setAntiAlias(true);

    paint.setTypeface(typeface);

    paint.setColor(color);

    paint.setTextSize(fontSizePX);


    int textWidth = (int) (paint.measureText(text) + pad * 2);

    int height = (int) (fontSizePX / 0.75);

    Bitmap bitmap = Bitmap.createBitmap(textWidth, height, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(bitmap);

    float xOriginal = pad;

    canvas.drawText(text, xOriginal, fontSizePX, paint);

    return bitmap;

}


public static int convertDiptoPix(Context context, float dip) {

    int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics());

    return value;

}


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 519 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信