gpt4 book ai didi

android - 不要在 Android TextView 中以缩写形式包装文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:07 25 4
gpt4 key购买 nike

有没有办法控制 TextView 选择将其文本换行的位置?我遇到的问题是它想要按句点换行 - 所以像“在美国和加拿大可用”这样的字符串可以在 U 和 S 之间的句点之后换行。有没有办法告诉 TextView 不要换行除非有一个句​​点和一个空格,或者一些程序化的方式来控制换行?

最佳答案

我最终编写了自己的算法来仅在空格处断开文本。我最初使用的是 breakText Paint的方法,但遇到了一些问题(实际上可能在此版本的代码中已解决,但没关系)。这不是我最好的代码块,它肯定可以稍微清理一下,但它确实有效。因为我覆盖了 TextView ,我只是从 onSizeChanged 中调用它确保宽度有效的方法。

private static void breakManually(TextView tv, Editable editable)
{
int width = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight();
if(width == 0)
{
// Can't break with a width of 0.
return false;
}

Paint p = tv.getPaint();
float[] widths = new float[editable.length()];
p.getTextWidths(editable.toString(), widths);
float curWidth = 0.0f;
int lastWSPos = -1;
int strPos = 0;
final char newLine = '\n';
final String newLineStr = "\n";
boolean reset = false;
int insertCount = 0;

//Traverse the string from the start position, adding each character's
//width to the total until:
//* A whitespace character is found. In this case, mark the whitespace
//position. If the width goes over the max, this is where the newline
//will be inserted.
//* A newline character is found. This resets the curWidth counter.
//* curWidth > width. Replace the whitespace with a newline and reset
//the counter.

while(strPos < editable.length())
{
curWidth += widths[strPos];

char curChar = editable.charAt(strPos);

if(((int) curChar) == ((int) newLine))
{
reset = true;
}
else if(Character.isWhitespace(curChar))
{
lastWSPos = strPos;
}
else if(curWidth > width && lastWSPos >= 0)
{
editable.replace(lastWSPos, lastWSPos + 1, newLineStr);
insertCount++;
strPos = lastWSPos;
lastWSPos = -1;
reset = true;
}

if(reset)
{
curWidth = 0.0f;
reset = false;
}

strPos++;
}

if(insertCount != 0)
{
tv.setText(editable);
}
}

关于android - 不要在 Android TextView 中以缩写形式包装文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com