Android不同汉字字数对齐
16lz
2021-01-24
在Android布局中进行使用到空格,以便实现文字的对齐。那么在Android中如何表示一个空格呢?
- 空格:
- 窄空格:‒
一个汉字宽度的空格: ‒;【用两个空格( )占一个汉字的宽度时,两个空格比一个汉字略窄,三个空格( )比一个汉字略宽】
在实际使用中需要灵活使用 和 的组合。
android:text="真实姓名:"
android:text="身  份 证:"
android:text="姓  ‒名:"
android:text="身份证:"
TextView实现首行缩进的方法:
- 在string资源文件中,在文字的前面加入”\u3000\u3000”即可实现首行缩进
- 在Java代码中,使用setText("\u3000\u3000"+xxxxx);
以上转载自https://blog.csdn.net/u014651216/article/details/52411113
这么写有一个问题,我在使用 ‒时候部分机型转译虎不是空格,而是“-”。
又发一种形式 半个中文字更准确点, 一个中文字但用起来会比中文字宽一点点。 所以中文对齐还是建议使用 , 而 在不同机型有不同表现。
这种形式只适用于半个字符拼接。如果不是半个就不行了。只能自己计算字符宽度
常見一個工具类AlignedTextUtils,使用时直接
SpannableStringBuilder retailName = AlignedTextUtils.justifyString("身份证", 4);retailName.append(":");tvName.setText(retailName);
public class AlignedTextUtils { private static int n = 0;// 原Str拥有的字符个数 private static SpannableString spannableString; private static double multiple = 0;// 放大倍数 /** * 对显示的字符串进行格式化 比如输入:出生年月 输出结果:出正生正年正月 */ public static String formatStr(String str) { if (TextUtils.isEmpty(str)) { return ""; } str = ToSBC(str); n = str.length()-1; if (n >= 4) { return str; } StringBuilder sb = new StringBuilder(str); for (int i = n - 1; i > 0; i--) { sb.insert(i, "正"); } return sb.toString(); } /** * 对显示字符串进行格式化 比如输入:安正卓正机正器正人 输出结果:安 卓 机 器 人 * * @param str * @return */ public static SpannableString formatText(String str) { if (TextUtils.isEmpty(str)) { return null; } str = formatStr(str); if (str.length() <= 4) { return null; } spannableString = new SpannableString(str); switch (n) { case 3: multiple = 0.3333333333333333333333333333333333; break; default: break; } for (int i = 1; i < str.length()-1; i = i + 2) { spannableString.setSpan(new RelativeSizeSpan((float) multiple), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } return spannableString; } /** 转全角的方法(SBC case)
全角空格为12288,半角空格为32 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 * @param input 任意字符串 * @return 半角字符串 * */ public static String ToSBC(String input) { //半角转全角: char[] c=input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i]==32) { c[i]=(char)12288; continue; } if (c[i]<127) c[i]=(char)(c[i]+65248); } return new String(c); } public static SpannableStringBuilder justifyString(String str, int num) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(); if (TextUtils.isEmpty(str)) { return spannableStringBuilder; } char[] chars = str.toCharArray(); if (chars.length >= num || chars.length == 1) { return spannableStringBuilder.append(str); } int l = chars.length; float scale = (float) (num - l) / (l - 1); for (int i = 0; i < l; i++) { spannableStringBuilder.append(chars[i]); if (i != l - 1) { SpannableString s = new SpannableString(" ");//全角空格 s.setSpan(new ScaleXSpan(scale), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannableStringBuilder.append(s); } } return spannableStringBuilder; }}
更多相关文章
- Android(安卓)Process 'command 'C:\Users\Win\AppData\Loca
- Android(安卓)Python 终端上使用python
- Android中汉字转拼音的内存优化处理
- 更改Android编译时的默认配置
- Android下jni开发之ndk的使用(下载、配置、编译遇到的问题)
- Android(安卓)APK签名
- Android汉字转拼音HanziToPinyin实测可用版
- android 单个模块编译
- android String与HTML的相互转换