我正在使用此方法缩小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 =========================
我做错了什么?如何改进此解决方案以防止此异常?