在我的Android应用程序中,我有一个文本视图,显示包含特殊字符的文本。 TextView以某种方式自动打破字符'/'和' - '的字符串。
例如,字符串“aaaaaaa / bbb-ccccc / ddd”显示为
aaaaaaa/
bbb-
ccccc/
ddd
但是,我想显示它没有任何换行符,除了在视图边界的那个,即,像这样:
aaaaaaa/bb
bb-ccccc/d
dd
有没有办法停用自动换行符或转义这些字符?我已经尝试用\ uFEFF转义而没有成功。
在我的Android应用程序中,我有一个文本视图,显示包含特殊字符的文本。 TextView以某种方式自动打破字符'/'和' - '的字符串。
例如,字符串“aaaaaaa / bbb-ccccc / ddd”显示为
aaaaaaa/
bbb-
ccccc/
ddd
但是,我想显示它没有任何换行符,除了在视图边界的那个,即,像这样:
aaaaaaa/bb
bb-ccccc/d
dd
有没有办法停用自动换行符或转义这些字符?我已经尝试用\ uFEFF转义而没有成功。
保留textview属性
android:layout_width="wrap_content"
android:layout_height="wrap_content"
在string.xml中定义您的字符串
<string name="Username"> aaaaaaa\/bb\nbb\-ccccc\/d\ndd</string>
也许这是一个解决方案: https://stackoverflow.com/a/22337074/3472905
我已经添加了提到的斜杠:
public class WordBreakTransformationMethod extends ReplacementTransformationMethod {
private static WordBreakTransformationMethod instance;
private WordBreakTransformationMethod() {}
public static WordBreakTransformationMethod getInstance() {
if (instance == null) {
instance = new WordBreakTransformationMethod();
}
return instance;
}
private static char[] dash = new char[]{'-', '\u2011'};
private static char[] space = new char[]{' ', '\u00A0'};
private static char[] slash = new char[]{'/', '\u2215'};
private static char[] original = new char[]{dash[0], space[0], slash[0]};
private static char[] replacement = new char[]{dash[1], space[1], slash[1]};
@Override
protected char[] getOriginal() {
return original;
}
@Override
protected char[] getReplacement() {
return replacement;
}
}
你可能可以使用 行 属性或其对应部分方法 setLines(INT)
没有现成的解决方案,也没有“在TextView中用文字换文本”这样的事情,以一种好的方式做到这一点的唯一方法是扩展TextView并修改Paint的breakText(String text,boolean measureForwards,float maxWidth,float [] measuredWidth)功能。
此外,您可以计算TextView大小(以像素为单位),计算一个字母的宽度(以像素为单位),然后找到适合一行的字母数(X),然后在每个X字母后插入换行符
我测试了以下代码。您甚至可以将其转换为函数:
String specialString = "a/b/-c/d-d";
String[] specialArray = specialString.split("/");
String str = "";
for(int i = 0; i < specialArray.length - 1; i++){
str = str + specialArray[i] + Character.toString((char) 47);
}
str = str + specialArray[specialArray.length - 1];
specialArray = str.split("-");
str = "";
for(int i = 0; i < specialArray.length - 1; i++){
str = str + specialArray[i] + Character.toString((char) 45);
}
str = str + specialArray[specialArray.length - 1];
textView.setText(str);
现在文本没有逃脱
您可以这样计算文本的大小:
String text = "This is my text";
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setTextSize(14.0f);
Rect bounds = new Rect();
textPaint.getTextBounds(text, 0, text.length(), bounds);
bounds.width() // width in pixels
bounds.height() // height in pixels
根据这些值,您可以分解文本并插入换行符。
它是Android 6中的新功能。
尝试将其添加到TextView xml布局中
android:hyphenationFrequency="none"
你可以试试这个:
"aaaaaaa"+"/"+"bbb-ccccc"+"/"+"ddd"