Android - SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度

我有以下布局(实际上是空的):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/set_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="content desc"
android:orientation="vertical" >


<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
</LinearLayout>

Activity类包含以下内容:

public class TestActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
}
}

当我在我的移动设备上运行这个,我得到以下错误:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

我已经尝试了这个与没有TextView和错误仍然存在,我一定是做了根本性的错误为这样一个基本的布局,导致这一点。

有人有什么想法吗,我怎么才能让这个加载没有错误?

251678 次浏览

看看你的代码,我不知道为什么你会得到这个错误,但我有同样的错误,但与EditText字段。

android:inputType="text"(或任何其他inputType文本变体)更改为android:inputType="textNoSuggestions"(或android:inputType="textEmailAddress|textNoSuggestions",例如)为我修复了它。

您还可以在代码中使用类似于

mInputField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

看起来Android默认假设EditText字段会有建议。如果没有,就会出错。不是100%相信这个解释,但上面提到的变化为我解决了这个问题。

http://developer.android.com/reference/android/text/Spanned.html#SPAN_EXCLUSIVE_EXCLUSIVE

希望这能有所帮助!

我在LogCat中遇到了相同的错误条目。在我的情况下,这是由我正在使用的第三方键盘引起的。当我把它改回Android键盘时,错误条目不再显示。

尝试使用默认的Android键盘,它会消失

我遇到了同样的警告,发现删除一个未使用的@id可以消除警告。对我来说,这是显而易见的,因为@id与链接到数据库的textview的一个不断增长的列表相关联,所以每个条目都有一个警告。

因为你得到的错误是与EditText相关的,那么它是与你的键盘相关的

你得到的错误不是你的代码的结果;你可能是在安装了三星TouchWiz的三星设备上进行测试。

我也有同样的错误,然后我在Nexus S上测试(也是三星的,但纯Android操作系统,没有TouchWiz),我没有得到这个错误。

因此,在您的情况下,在设备上测试时忽略这些错误!:)

我也遇到过同样的问题。我几乎浪费了几周的时间来解决这个问题。 最后我对自己产生了怀疑,并试图通过复制和粘贴一些启动文件来创建另一个项目,如SplashScreen &LoginScreen . < / p >

但与相同的代码,我仍然得到SPAN_EXCLUSIVE_EXCLUSIVE

然后我已经从启动屏幕删除了处理程序代码,并再次尝试,哇,它的工作。 我没有得到SPAN_EXCLUSIVE_EXCLUSIVE问题在logcat。< / p >

我在想,为什么会这样?直到时间没有得到任何其他解决方案,但从启动画面删除处理程序,它是工作的。

如果问题已经解决,请尝试在这里更新。

在你的android手机上转到:
设置->应用程序管理器->全部->三星键盘,然后点击“清除缓存” < br > (删除此应用程序收集的所有数据).

明确您已经在mainactitivity中为以下方法onCreateOptionsMenu和onCreate传递了一个值

在某些情况下,开发人员删除“return super.onCreateOptionsMenu(menu)”语句并将其更改为“return true”。

检查是否有任何元素,如按钮或文本视图复制(复制两次)在屏幕上遇到。我没有注意到这件事,也不得不面对同样的问题。

Masood Moshref是对的,这个错误发生是因为菜单的选项菜单没有做好准备,在onCreate()方法中缺少“返回super.onCreateOptionsMenu(菜单)”。

尝试调试这个错误,首先到你的android终端/控制台并执行这个命令:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

然后如果输出是你的app…是你的应用程序导致了错误。尝试寻找传递给layout的空Strings

我有这个完全相同的问题,这是我的错误,因为我传递了一个空String到我的布局。在将""更改为" "后,此错误消失了。

如果你没有从控制台输出你的应用程序,那么它是其他东西导致的(可能,正如其他人所说,android键盘)

当我从网上复制一些文本时,我也遇到了这个问题。我的解决方案是在做任何进一步处理之前修剪文本/删除格式。

我有同样的问题,但与listView....我解决了它,因为我使用了一个错误的R.id.listView列表视图需要有一个值,在我的情况下,它是字符串,我保存在listView2…所以正确的代码是R.id.listView2

我有同样的问题,然后我通过以下代码修复它!

  text = (EditText)findViewById(R.id.TextVoiceeditText);
text.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

此错误也发生由于改变API URL。试着点击你在postman和c中使用的URL,如果它工作正常的话。 重新检查api解决了我的问题

尽量避免在xml设计中使用视图。我也有同样的问题,但当我删除视图。它工作得很完美。

像例子:

             <EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:inputType="number"
android:textColor="#fff" />


<view
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#f9d7db" />

还检查并尝试通过反复试验将android: inputType = "数量"更改为android: inputType = "文本",如果不需要,最好不要使用它。有时键盘卡住,在某些设备中出现错误。

这对我很管用……在每个设备上

    <EditText
android:maxLines="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="15sp"
android:layout_centerVertical="true"
android:textColor="#000"
android:id="@+id/input_search"
android:background="@null"
android:inputType="text"
android:hint="Enter Address, City or Zip Code"
android:imeOptions="actionSearch"
/>

在Java代码中:

mSearchText.setOnEditorActionListener(new TextView.OnEditorActionListener() {


@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if(actionId == EditorInfo.IME_ACTION_SEARCH
|| actionId == EditorInfo.IME_ACTION_DONE
|| keyEvent.getAction() == KeyEvent.ACTION_DOWN
|| keyEvent.getAction() == KeyEvent.KEYCODE_ENTER){


//execute our method for searching
}


return false;
}
});

在我的例子中,inputType为text / textCapCharacters的EditText字段封装了这个错误。每当我使用退格键完全删除这些字段中的文本时,我就会在我的日志中注意到这一点。

对我有效的解决方案是将这些字段的inputType更改为textNoSuggestions,因为这是最适合的类型,并且不再给我任何不想要的错误。

在我的情况下,我点击最近的应用程序快捷方式在我的手机和关闭所有的应用程序。这个解决方案总是为我工作,因为这个错误与代码无关。

要解决这个问题,只需在你的AndroidManifest.xml文件中添加android: usesCleartextTraffic =“true",它位于主要. . \ app \ src \ \ AndroidManifest.xml,就像下面所示…

enter image description here

**DONT PUT SET TEXT IN TEXT WATCHER**etSearch.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {
visibleResultList = false
if (s.toString().length != 0) {
getSearchSuggetion(no_of_rec, 0, s.toString())
} else {
// etSearch.setText("")
}
Log.e("text_change","============"+s.toString())
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
}
})