gpt4 book ai didi

java - Android stackoverflow 使用 while 循环

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

我正在使用这个方法来缩小 TextView 文本,正如它的名字所暗示的那样:

public static float shrinkTextToFit(String caller, float availableWidth, TextView textView, float startingTextSize, float minimumTextSize) {
startingTextSize = textView.getTextSize() < startingTextSize ? textView.getTextSize() : startingTextSize;
Log.i("123", "=========================");
Log.i("123", caller + " called shrinkTextToFit");
CharSequence text = textView.getText();
float textSize = startingTextSize;
textView.setTextSize(startingTextSize);
while (!TextUtils.equals(text, (TextUtils.ellipsize(text, textView.getPaint(), availableWidth, TextUtils.TruncateAt.END)))) {
textSize -= 2;
Log.i("123", "textSize: " + textSize);
if ((textSize <= minimumTextSize) || (textSize <= 0)) {
break;
} else {
textView.setTextSize(textSize);
}
}
return textSize;
}

而且我只在这个设备上遇到堆栈溢出(有时不会发生):

  • 三星 GT-I9192
  • 三星 GT-I9300
  • LG-D290

操作系统版本:4.4.2、4.3

10  at android.widget.TextView.sendAfterTextChanged(TextView.java:8503)
11 at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10633)
12 at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:970)
13 at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:497)
14 at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:247)
15 at android.text.TextUtils.ellipsize(TextUtils.java:1185)
16 at android.text.TextUtils.ellipsize(TextUtils.java:1079)
17 at android.text.TextUtils.ellipsize(TextUtils.java:1054)
18 at app.utils.Utils.float shrinkTextToFit(float,android.widget.TextView,float,float)

我在 TextWatcher afterTextChanged() 中调用这个函数,是的,这可能是问题所在,但我的想法是在插入文本时缩小文本大小。

@Override
public void afterTextChanged(Editable s) {
mEditText.removeTextChangedListener(mTextWatcher);
Utils.shrinkTextToFit("watcher", mAvailableWidth, mEditText, 50, 10);
mEditText.addTextChangedListener(mTextWatcher);
}

示例日志:

开始输入字母(滚动阅读所有日志):

08-01 14:48:50.284    watcher called shrinkTextToFit
08-01 14:48:50.676 =========================
08-01 14:48:50.677 watcher called shrinkTextToFit
08-01 14:48:51.749 =========================
08-01 14:48:51.749 watcher called shrinkTextToFit
08-01 14:48:51.749 textSize: 48.0
08-01 14:48:51.750 textSize: 46.0
08-01 14:48:51.751 textSize: 44.0
08-01 14:48:51.752 textSize: 42.0
08-01 14:48:52.500 =========================
08-01 14:48:52.501 watcher called shrinkTextToFit
08-01 14:48:52.501 textSize: 48.0
08-01 14:48:52.501 textSize: 46.0
08-01 14:48:52.501 textSize: 44.0
08-01 14:48:52.501 textSize: 42.0
08-01 14:48:52.501 textSize: 40.0
08-01 14:48:52.503 textSize: 38.0
08-01 14:48:52.504 textSize: 36.0
08-01 14:48:53.013 =========================
08-01 14:48:53.013 watcher called shrinkTextToFit
08-01 14:48:53.013 textSize: 48.0
08-01 14:48:53.013 textSize: 46.0
08-01 14:48:53.013 textSize: 44.0
08-01 14:48:53.014 textSize: 42.0
08-01 14:48:53.015 textSize: 40.0
08-01 14:48:53.015 textSize: 38.0
08-01 14:48:53.015 textSize: 36.0
08-01 14:48:53.016 textSize: 34.0
08-01 14:48:53.017 textSize: 32.0
08-01 14:48:53.020 textSize: 30.0
08-01 14:48:59.948 =========================
08-01 14:48:59.949 watcher called shrinkTextToFit
08-01 14:48:59.949 textSize: 48.0
08-01 14:48:59.949 textSize: 46.0
08-01 14:48:59.949 textSize: 44.0
08-01 14:48:59.949 textSize: 42.0
08-01 14:48:59.950 textSize: 40.0
08-01 14:48:59.950 textSize: 38.0
08-01 14:48:59.950 textSize: 36.0
08-01 14:48:59.950 textSize: 34.0
08-01 14:48:59.951 textSize: 32.0
08-01 14:48:59.951 textSize: 30.0
08-01 14:48:59.951 textSize: 28.0

开始删除字母:

08-01 14:48:59.953    =========================
08-01 14:48:59.953 watcher called shrinkTextToFit
08-01 14:48:59.954 textSize: 48.0
08-01 14:48:59.954 textSize: 46.0
08-01 14:48:59.954 textSize: 44.0
08-01 14:48:59.954 textSize: 42.0
08-01 14:48:59.954 textSize: 40.0
08-01 14:48:59.954 textSize: 38.0
08-01 14:48:59.954 textSize: 36.0
08-01 14:48:59.954 textSize: 34.0
08-01 14:48:59.954 textSize: 32.0
08-01 14:48:59.954 textSize: 30.0
08-01 14:49:00.116 =========================
08-01 14:49:00.116 watcher called shrinkTextToFit
08-01 14:49:00.116 textSize: 48.0
08-01 14:49:00.117 textSize: 46.0
08-01 14:49:00.117 textSize: 44.0
08-01 14:49:00.117 textSize: 42.0
08-01 14:49:00.117 textSize: 40.0
08-01 14:49:00.117 textSize: 38.0
08-01 14:49:00.117 textSize: 36.0
08-01 14:49:00.121 =========================
08-01 14:49:00.121 watcher called shrinkTextToFit
08-01 14:49:00.121 textSize: 48.0
08-01 14:49:00.121 textSize: 46.0
08-01 14:49:00.121 textSize: 44.0
08-01 14:49:00.121 textSize: 42.0
08-01 14:49:00.284 =========================
08-01 14:49:00.284 watcher called shrinkTextToFit
08-01 14:49:00.288 =========================
08-01 14:49:00.288 watcher called shrinkTextToFit
08-01 14:49:00.444 =========================

我做错了什么,我该如何改进这个解决方案以防止出现这种异常?

最佳答案

我认为您应该为 textsize 计算一下,然后运行您的 setTextSize 一次

即使您使用某种临时 View 来完成工作,也可以从中获取大小。而不是调用带有事件监听器的 View 。

关于java - Android stackoverflow 使用 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31743855/

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