- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 MultiAutoCompleteTextView
自定义控件,当用户按下空格键时,我会在其中创建纸片文本。
当文本框为空时,我不希望用户一开始就输入空格,所以我放了一个 inputFilter
以防止用户一开始就输入空格。
过滤代码如下:
private void RestrictUselessSpaces(){
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (Character.isWhitespace(source.charAt(i))) {
if(!getText().toString().trim().equals(""))
{
return " ";
}
else
{
return "";
}
}
}
return null;
}
};
setFilters(new InputFilter[]{filter});
}
不知何故,当我评论 RestrictUselessSpaces
函数时。它工作正常。但是当这个函数运行时。比起我尝试在字符后输入空格。它给我 indexoutofboundexception
错误。这是我遇到错误的代码。
public void setChips(String s){
if(s.contains(" ") && !s.trim().equals("")) // check space in string
{
this.chips = s.trim().split(" ");
SpannableStringBuilder ssb = new SpannableStringBuilder(getText());
// split string wich comma
int x =0;
// loop will generate ImageSpan for every country name separated by comma
for(String c : chips){
// inflate chips_edittext layout
LayoutInflater lf = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
TextView textView = (TextView) lf.inflate(R.layout.chips_edittext, null);
textView.setText(c); // set text
setFlags(textView, c); // set flag image
// capture bitmapt of genreated textview
int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
textView.measure(spec, spec);
textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap(textView.getWidth(), textView.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b);
canvas.translate(-textView.getScrollX(), -textView.getScrollY());
textView.draw(canvas);
textView.setDrawingCacheEnabled(true);
Bitmap cacheBmp = textView.getDrawingCache();
Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
textView.destroyDrawingCache(); // destory drawable
// create bitmap drawable for imagespan
BitmapDrawable bmpDrawable = new BitmapDrawable(viewBmp);
bmpDrawable.setBounds(0, 0,bmpDrawable.getIntrinsicWidth(),bmpDrawable.getIntrinsicHeight());
// create and set imagespan
ssb.setSpan(new ImageSpan(bmpDrawable),x ,x + c.length() , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
x = x+ c.length() +1;
}
// set chips span
setText(ssb);
// move cursor to last
setSelection(s.length());
}
}
ssb.setSpan
行导致了问题,但是当我调试代码时。调试器运行这一行时没有给我任何异常。执行此函数后发生错误,这让我更难确定真正导致问题的原因。
这是我的日志:
08-10 20:04:19.253: E/AndroidRuntime(18461): FATAL EXCEPTION: main
08-10 20:04:19.253: E/AndroidRuntime(18461): Process: com.example.twitter, PID: 18461
08-10 20:04:19.253: E/AndroidRuntime(18461): java.lang.IndexOutOfBoundsException: setSpan (2 ... 2) ends beyond length 1
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1016)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:592)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.Selection.setSelection(Selection.java:76)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.Selection.setSelection(Selection.java:87)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.widget.EditText.setSelection(EditText.java:94)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.example.libraries.ChipsMultiAutoCompleteTextview.setChips(ChipsMultiAutoCompleteTextview.java:281)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.example.libraries.ChipsMultiAutoCompleteTextview$1.onTextChanged(ChipsMultiAutoCompleteTextview.java:192)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.widget.TextView.sendOnTextChanged(TextView.java:7429)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.widget.TextView.handleTextChanged(TextView.java:7488)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9203)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:675)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:197)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.os.Handler.dispatchMessage(Handler.java:102)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.os.Looper.loop(Looper.java:212)
08-10 20:04:19.253: E/AndroidRuntime(18461): at android.app.ActivityThread.main(ActivityThread.java:5151)
08-10 20:04:19.253: E/AndroidRuntime(18461): at java.lang.reflect.Method.invokeNative(Native Method)
08-10 20:04:19.253: E/AndroidRuntime(18461): at java.lang.reflect.Method.invoke(Method.java:515)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
08-10 20:04:19.253: E/AndroidRuntime(18461): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
08-10 20:04:19.253: E/AndroidRuntime(18461): at dalvik.system.NativeStart.main(Native Method)
最佳答案
尝试使用这个
setSelection(s.length() - 1);
关于java - indexoutofboundexception : setSpan (2. ..2) 超出长度 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25230003/
假设我有一个 SpannableString,其中为 span 设置了一个 URLSpan,如下所示: SpannableString ss = new SpannableString(text);
鉴于我们已经单独返回了一份动物列表: val animals = "cat, dog and mouse" 然后我们将其连接到我们的 animalsMessage 中,如下所示: val animal
我收到一个 arrayoutofboundsexception 错误。当我尝试格式化要显示的草稿文本消息时。这只是一个简单的短信应用程序,我正在尝试设置文本大小和颜色。当我评论这两行时,我的应用程序没
我有一个字符串,例如:“@user 喜欢你的照片!2 小时前”,细字体。 这个字符串由三部分组成; 1: @user -> 它应该是 typeface.normal 并且可以点击 2:喜欢你的照片!
我使用以下代码,它将错误的文本范围包装为粗体 final StyleSpan span = new StyleSpan(BOLD); SpannableString ss = new
final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); final SpannableString ss = new
我正在尝试为 设置不同的颜色 str.append(" ").append(isBlue ? "b" : "p"); SpannableString s
我想在必填字段中设置符号 *。为此,我可以使用下面的代码行: hint_mobile!!.setText(Html.fromHtml(resources.getString(R.string.mobi
我最近发布了我的 Android 应用程序的更新,并且收到了大量崩溃报告,堆栈如下。我很茫然,因为堆栈中绝对没有我的代码,所以我不确定如何解决这个问题。有没有人见过这个错误?我能做些什么来解决这个问题
我有一个 bold 按钮,当按下该按钮时,应该会更改 EditText 字段 中所选文本的字体。这一切都完美无缺,只有一个异常(exception)。如果 EditText 中的其他地方有 bold
为什么不能使用同一个 Span 对象对上面的 setSpan 进行两次设置? SpannableString ss = new SpannableString("aaaaa[1]bbbb[1]cccc
我的实验表明,如果我 setSpan(o, start, end) 从字符串的开始到结束,其中 end 是 String.length( ) - 1,最后一个字符未被覆盖。 当我将 end 更改为完全
我设法通过以下代码在我的“正常” Activity 中更改了 AppBar 标题的字体: setContentView(R.layout.activity_scrolling); Toolba
我有一个 MultiAutoCompleteTextView 自定义控件,当用户按下空格键时,我会在其中创建纸片文本。 当文本框为空时,我不希望用户一开始就输入空格,所以我放了一个 inputFilt
我正在设置 Span到文本的一部分。 Span 本身运行良好。但是,文本是由 String.format 创建的来自 Resources我不知道start和 end我将 Span 设置为文本中的一部分
我有一份指示 IndexOutOfBoundsException 的崩溃报告,但我不知道是什么原因导致的,因为堆栈中没有我的代码中的任何内容。这是堆栈: Fatal Exception: java.l
在返回时,我得到一个错误“java.lang.IndexOutOfBoundsException: setSpan (5 ... 5) ends beyond length 0” 我不明白我在哪里得到
我在调用 EditText.setSelection() 时遇到此异常 java.lang.IndexOutOfBoundsException: setSpan (N ... N) ends beyo
我将这个库用于带有标签的 Material editText: https://github.com/rey5137/Material/wiki/Text-Field不错的图书馆:) 但是…… 我正在
我在安卓系统工作。我有个问题。当我第二次单击我的文本框时,我的应用程序崩溃了。 这是我的 Logcat 消息: java.lang.IndexOutOfBoundsException: setSpan
我是一名优秀的程序员,十分优秀!