嗨,我正在尝试使用 TextView,它具有以下约束:
- 它最多可以走 2 行,如果超过 2 行,它会在最后显示 '...'
- 从字体大小 30 开始,我们首先尝试通过将字体大小从 30 减小到 12 来将所有内容放在一行中。这意味着如果我们可以在第一行中放置所有字体大小为 20 的内容,我们坚持使用字体大小 20
- 如果我们不能用 12 号字体容纳所有内容,我们将保持 12 号,然后换行到下一行,所有内容都将保持 12 号
所以现在我有一个 EditText,它允许用户输入文本,并且用户输入的每个字符,TextView 将反映用户输入的内容,并根据上述规则更改字体大小。
userEditView.addTextChangedListener(
new TextWatcher() {
@Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
float fontSize = 30;
userTextView.setTextSize(fontSize);
int userTextViewWidth = userTextView.getWidth();
int userTextViewContainerWidth = parentRelatievLayOutView.getWidth();//parentRelativeLayout is a RelativeLayout in xml
// logic here => i want to know when to wrap a line, i should wrap when the textView width is same or greater than the parent container, in such case, we reduce the font size, and then get the new textView width, see if it can be fit in one line or not
while (userTextViewWidth >= userTextViewContainerWidth) {
fontSize -= 1;
if (fontSize <= 12) {
fontSize = 12;
break;
}
userTextView.setTextSize(fontSize);
//userTextView.append("\uFEFF"); // does not work
//userTextView.invalidate(); // does not work
userTextViewWidth = userTextView.getWidth();// *** this line never gets updated
}
}
@Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
userTextView.setText(charSequence);
}
@Override public void afterTextChanged(Editable editable) {
}
});
所以我的问题是userTextViewWidth = userTextView.getWidth()
永远不会更新,即字体大小变小,宽度仍然相同......我想改变Android存在一个问题,其中TextView大小没有改变Android:TextView高度在收缩后没有改变字体大小,但我试过了,它提供的任何技术都不起作用。