下面列出了android.text.TextPaint#getTypeface ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static int getTextWidth(@Nullable final CharSequence text, final TextPaint paint) {
if (TextUtils.isEmpty(text)) {
return 0;
}
final int length = text.length();
final float[] widths = new float[length];
final int count;
final Typeface savedTypeface = paint.getTypeface();
try {
paint.setTypeface(getTextTypeface(text));
count = paint.getTextWidths(text, 0, length, widths);
} finally {
paint.setTypeface(savedTypeface);
}
int width = 0;
for (int i = 0; i < count; i++) {
width += Math.round(widths[i] + 0.5f);
}
return width;
}
private void apply(TextPaint paint) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}
final int fakeStyle = oldStyle & ~typeface.getStyle();
if ((fakeStyle & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}
if ((fakeStyle & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}
paint.setTypeface(typeface);
}
private static int getTextWidth(@Nullable final CharSequence text, final TextPaint paint) {
if (TextUtils.isEmpty(text)) {
return 0;
}
final int length = text.length();
final float[] widths = new float[length];
final int count;
final Typeface savedTypeface = paint.getTypeface();
try {
paint.setTypeface(getTextTypeface(text));
count = paint.getTextWidths(text, 0, length, widths);
} finally {
paint.setTypeface(savedTypeface);
}
int width = 0;
for (int i = 0; i < count; i++) {
width += Math.round(widths[i] + 0.5f);
}
return width;
}
private void applyCustomTypeFace(TextPaint paint) {
final Typeface old = paint.getTypeface();
final int oldStyle = (old == null) ? 0 : old.getStyle();
Typeface typeface = this.typeface;
int fake = oldStyle & ~typeface.getStyle();
if ((fake & android.graphics.Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}
if ((fake & android.graphics.Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}
paint.setTypeface(typeface);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setTextSize(size);
ds.setColor(color);
if (face != null) {
ds.setTypeface(face);
} else if (bold) {
Typeface tf = ds.getTypeface();
if (tf != null) {
int style = tf.getStyle() | Typeface.BOLD;
tf = Typeface.create(tf, style);
ds.setTypeface(tf);
style &= ~tf.getStyle();
if ((style & Typeface.BOLD) != 0) {
ds.setFakeBoldText(true);
}
}
}
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setTextSize(size);
ds.setColor(color);
if (face != null) {
ds.setTypeface(face);
} else if (bold) {
Typeface tf = ds.getTypeface();
if (tf != null) {
int style = tf.getStyle() | Typeface.BOLD;
tf = Typeface.create(tf, style);
ds.setTypeface(tf);
style &= ~tf.getStyle();
if ((style & Typeface.BOLD) != 0) {
ds.setFakeBoldText(true);
}
}
}
}
private static int getTextWidth(@Nullable final CharSequence text, final TextPaint paint) {
if (TextUtils.isEmpty(text)) {
return 0;
}
final int length = text.length();
final float[] widths = new float[length];
final int count;
final Typeface savedTypeface = paint.getTypeface();
try {
paint.setTypeface(getTextTypeface(text));
count = paint.getTextWidths(text, 0, length, widths);
} finally {
paint.setTypeface(savedTypeface);
}
int width = 0;
for (int i = 0; i < count; i++) {
width += Math.round(widths[i] + 0.5f);
}
return width;
}
@SuppressLint("WrongConstant")
private void update(TextPaint textPaint) {
Typeface old = textPaint.getTypeface();
int oldStyle = old != null ? old.getStyle() : 0;
// Typeface is already cached at the system level
// keep the style set before
Typeface font = Typeface.create(this.font, oldStyle);
textPaint.setTypeface(font);
}
@Override
public void updateMeasureState(TextPaint ds) {
if (mTypeface != null || mStyle != 0) {
Typeface tf = ds.getTypeface();
int style = 0;
if (tf != null) {
style = tf.getStyle();
}
style |= mStyle;
if (mTypeface != null) {
tf = Typeface.create(mTypeface, style);
} else if (tf == null) {
tf = Typeface.defaultFromStyle(style);
} else {
tf = Typeface.create(tf, style);
}
int fake = style & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
ds.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
ds.setTextSkewX(-0.25f);
}
ds.setTypeface(tf);
}
if (mTextSize > 0) {
ds.setTextSize(mTextSize);
}
}
@Override
public void updateMeasureState(TextPaint p) {
Typeface old=p.getTypeface();
if ( old != null && !old.isBold() && tf_.isBold() ) {
p.setFakeBoldText(true);
}
if ( old != null && !old.isItalic() && tf_.isItalic() ) {
p.setTextSkewX(-0.25f);
}
p.setTypeface(tf_);
}
@Override
public void updateDrawState(TextPaint tp) {
Typeface old=tp.getTypeface();
if ( old != null && !old.isBold() && tf_.isBold() ) {
tp.setFakeBoldText(true);
}
if ( old != null && !old.isItalic() && tf_.isItalic() ) {
tp.setTextSkewX(-0.25f);
}
tp.setTypeface(tf_);
}
@Override
public void updateMeasureState(TextPaint ds) {
if (mTypeface != null || mStyle != 0) {
Typeface tf = ds.getTypeface();
int style = 0;
if (tf != null) {
style = tf.getStyle();
}
style |= mStyle;
if (mTypeface != null) {
tf = Typeface.create(mTypeface, style);
} else if (tf == null) {
tf = Typeface.defaultFromStyle(style);
} else {
tf = Typeface.create(tf, style);
}
int fake = style & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
ds.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
ds.setTextSkewX(-0.25f);
}
ds.setTypeface(tf);
}
if (mTextSize > 0) {
ds.setTextSize(mTextSize);
}
}
@Override
public void updateMeasureState(TextPaint ds) {
final Typeface styledTypeface;
int style = 0;
if (mTypeface != null) {
style = mStyle;
styledTypeface = Typeface.create(mTypeface, style);
} else if (mFamilyName != null || mStyle != 0) {
Typeface tf = ds.getTypeface();
if (tf != null) {
style = tf.getStyle();
}
style |= mStyle;
if (mFamilyName != null) {
styledTypeface = Typeface.create(mFamilyName, style);
} else if (tf == null) {
styledTypeface = Typeface.defaultFromStyle(style);
} else {
styledTypeface = Typeface.create(tf, style);
}
} else {
styledTypeface = null;
}
if (styledTypeface != null) {
int fake = style & ~styledTypeface.getStyle();
if ((fake & Typeface.BOLD) != 0) {
ds.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
ds.setTextSkewX(-0.25f);
}
ds.setTypeface(styledTypeface);
}
if (mTextSize > 0) {
ds.setTextSize(mTextSize);
}
}