android - 在TextView中,android阻止换行符

  显示原文与译文双语对照的内容

我的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/bbnbb-ccccc/dndd</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;


 }


}



你可能可以使用属性或者它的计数器part方法 setLines(int) 。

没有现成的解决方案,没有"在TextView中按字母换行"这样做的唯一方法是扩展TextView并修改 breakText ( 绘制文本文本,布尔 measureForwards,浮动 maxWidth,浮动 [] 组件) 函数。

此外,您可以计算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);



现在文本没有escape

你可以按以下方式计算文本的大小:


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



基于这些值,你可以分解文本中的文本并插入换行符。

...