在android中使用自定义类型face创建自定义通知

时间:2016-02-06 07:18:32

标签: android android-notifications android-custom-view

您好我看到一些App创建并显示自定义字体的自定义通知,然后我在Google上搜索,我找到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类

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);
}
}

但是当我使用此代码时,没有任何反应,并且通知会显示defualt字体 所以有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

我认为你应该采用另一种显示自定义文字的方式,我发现这篇文章https://stackoverflow.com/a/4411060/1007087检查一下,我希望你会觉得这很有用。虽然它正在创建位图,但您可以进行自定义。