在APP中需要用到自定义的字体包,这里顺便插一下自定义字体的实现方法:
/**
* 自定义字体
*
* @param context
* @param fontPath 字体路径
* @return
*/
public static void customFont(Context context, String fontPath, TextView textView) {
textView.setTypeface(Typeface.createFromAsset(context.getAssets(),"fonts/字体.ttf"));
}
步入正题,因为自定义字体与android的原生字体包兼容性不高导致当字体再TextView中显示的时候即时设置了gravity为居中,但中文字体全部偏上,具体现象见下图
解决方案:
既然不能用控件属性去控制页边距,那么只能通过代码手段去判断设置了,我在这里开始判断输入的字符串是否包含有中文字符,如果有则用代码去自定义控件位置,当检测到全部都是英文字母时则跳过设置,代码如下:
/**
* 传入的str包含中文字符时设置文字的上边距,以保证文字都居中
* @param str
*/
private void setChineseWordMargins(String str) {
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
// 由于测试机在720*1280的屏幕分辨率下距离15px刚刚居中,为了适配其他屏幕需要计算一下各个屏幕的实际距离
int actualTopMargin = 15 * dm.heightPixels / 1280;
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) tvSpinnerTitle.getLayoutParams();
if (isChinease(str)) {
lp.topMargin = actualTopMargin;
} else {
lp.topMargin = 0;
}
tvSpinnerTitle.setLayoutParams(lp);
}
/**
* 判断字符串中是否包含中文字
*
* @param str
* @return
*/
public static boolean isChinease(String str) {
String regEx = "[\\u4E00-\\u9FA5]+"; // 正则表达式
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
if (m.find()) {
return true;
} else {
return false;
}
}
这样就解决了显示问题。
在Android应用中使用自定义字体时遇到中英文混合显示不正常的问题,表现为中文字符偏上。解决办法是通过代码判断字符串是否包含中文字符,如果包含则通过调整控件位置来确保居中对齐,若全部为英文则不作处理。
6955

被折叠的 条评论
为什么被折叠?



