Search code examples
androidandroid-notificationsandroid-custom-view

Create custom notification with custom type face in android


Hi I see some App create and show a custom notification with custom typeface and I googling for that and I found this question.
but that does not work for me this is my code

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

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

but when I use this code nothing happens and notification shows with the defualt typeface.
so can anyone help me about this?


Solution

  • I think you should do an alternate way of displaying your custom text, I have found this post https://stackoverflow.com/a/4411060/1007087 Check this and I hope you might find this useful. Though it is creating a bitmap you can do your customization.