只是为了提供信息,我已经使用了所有说明如何在界限内放置文本的资源
但我的主要问题是我不想调整字体大小以适应文本边界。我所拥有的是一个从文件夹TextView
中获取的。此外,用户可以通过.All 低于那里的设备更改字体大小似乎没问题,但是设备上的文本不符合图像中
的边界Custom Font
assets
slider
Jelly Bean
Jelly Bean
TextView
此外,stackoverflow
答案中所述的有目的的解决方案都没有任何好处。不知何故,一些解决方案只是降低了font
尺寸以适应范围。我不想降低字体大小,而是想执行以下操作
- 计算适合屏幕宽度的文本长度
- 然后以该特定长度将换行符附加到字符串
- 由于文本长度会很大,我害怕使用 StringBuffer 和 StringBuilder 因为它们很容易导致
out of memory exception
- 所以
TextView
当达到可见长度时自动计算插入新闻行的因子。
到目前为止,我能够分解文本,通过计算一个有助于找到适合屏幕宽度的最小单词数量的因子。但是,这会导致单词被破坏,含义Hello
可能会导致Hel
一行和另一行继续lo
。
public class AutoResizeTextView extends TextView {
private boolean forFirstTime = true;
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (forFirstTime)
monitorChanges();
}
private void monitorChanges() {
final int widthLimit = getMeasuredWidth() - getCompoundPaddingLeft()
- getCompoundPaddingRight();
if (widthLimit <= 0) {
return;
}
final String mainText = getText().toString();
final float actualTextWidth = getPaint().measureText(mainText);
forFirstTime = false;
setText("");
String[] overallText = inputText.split("\\n");
for(int j=0;j<overallText.length;j++){
String mainText =overallText[j];
int length = mainText.length();
int lineNumber = Math.round(getPaint().measureText(mainText)/ widthLimit);
int wordLimit = (int) Math.round(length / (lineNumber * 1.3));
//wordLimit+=2;
if (wordLimit < length) {
int count = Math.round(length / wordLimit);
int startIndex = -1, endIndex = -1;
for (int i = 0; i < count; i++) {
startIndex = wordLimit * i;
endIndex = wordLimit * (i + 1);
append(mainText.substring(startIndex, endIndex) + "\n");
}
append(mainText.toString().substring(endIndex, length)+"\n");
}
}
}
现在我希望单词不会被破坏,如默认 android EditText
on wrap_content
params 所展示的那样,如果它变得大到适合,整个文本将移动到下一行。而且计算公式wordLimit
不准确,我只想找出string
适合的widthLimit
确切长度TextView/EditText
我也在努力,如果有任何事情发生,我一定会发布。