在 android 中使用自定义字体创建自定义通知

Create custom notification with custom type face in android

您好,我看到一些应用程序创建并显示了带有自定义字体的自定义通知,我用谷歌搜索找到了 this question
但这对我不起作用这是我的代码

public static void CustomNotificationV(Context context,
                                       String message,boolean enter) {

    SpannableStringBuilder sb = new SpannableStringBuilder(message);

    sb.setSpan(new CustomTypefaceSpan("", Constants.molla), 0, sb.length() - 1,
            Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

    int icon=R.drawable.ex;

    // create new id
    Date date = new Date();
    int notificationid = (int) date.getTime();
    long when = System.currentTimeMillis();
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(icon, message, when);

    Intent notificationIntent = new Intent(context, Splash.class);
    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent = PendingIntent.getActivity(context,
            notificationid, notificationIntent, 0);
    RemoteViews contentView = new RemoteViews(context
            .getApplicationContext().getPackageName(),
            R.layout.custom_notification);
    contentView.setImageViewResource(R.id.leftimage,
            icon);

    contentView.setTextViewText(R.id.message_custom_notification, sb);
    notification.contentView = contentView;
    notification.contentIntent = intent;

    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(notificationid, notification);
}

和我的 CustomTypefaceSpan class

package tools;

import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;

/**
 * Created by mk-rad on 08/02/2015.
 */

public class CustomTypefaceSpan extends TypefaceSpan {
private final Typeface newType;

public CustomTypefaceSpan(String family, Typeface type) {
    super(family);
    newType = type;
}

@Override
public void updateDrawState(TextPaint ds) {
    applyCustomTypeFace(ds, newType);
}

@Override
public void updateMeasureState(TextPaint paint) {
    applyCustomTypeFace(paint, newType);
}

private static void applyCustomTypeFace(Paint paint, Typeface tf) {
    int oldStyle;
    Typeface old = paint.getTypeface();
    if (old == null) {
        oldStyle = 0;
    } else {
        oldStyle = old.getStyle();
    }

    int fake = oldStyle & ~tf.getStyle();
    if ((fake & Typeface.BOLD) != 0) {
        paint.setFakeBoldText(true);
    }

    if ((fake & Typeface.ITALIC) != 0) {
        paint.setTextSkewX(-0.25f);
    }

    paint.setTypeface(tf);
}
}

但是当我使用此代码时,没有任何反应,并且通知显示为默认字体。
所以有人可以帮我解决这个问题吗?

我认为您应该采用另一种方式来显示您的自定义文本,我发现了这个 post 检查一下,希望您会发现它有用。虽然它正在创建位图,但您可以进行自定义。