Android(安卓)自定义字体中英文混合后导致页边距不对的解决方案
16lz
2021-01-25
在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; } }
这样就解决了显示问题。
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Android(安卓)keep screen on 方法
- 王立平--include在Android应用
- android imageview设置图片的小问题
- android 将文字转为为图片
- android 使用icon进行字符编码转换
- android studio apk打包命名规范
- Android(安卓)3 开始 Activity MainThread中不能执行http通信了
- [Android]http请求