Android-SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度


190

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

<?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我都尝试过,并且错误仍然存​​在,对于这样的基本布局,我必须做一些根本错误的事情。

有人对我如何使它加载而没有错误有任何想法吗?


检查LogCat并查看与您的错误关联的堆栈跟踪。如果确实来自此应用程序,则将整个堆栈跟踪发布为对您的问题的编辑。另外,我想摆脱android:contentDescriptionLinearLayout,作为容器不可作为焦点,因此描述将不被使用AFAIK。
CommonsWare 2012年

6
感谢您的答复。不幸的是,没有此错误的堆栈跟踪,输出与我上面发布的完全相同,但是LogCat中的application字段确实指向我的应用程序。我已经调试了代码,并逐步执行了每一行,没有引发任何错误,因此它必须在Android代码中某个期望不存在的地方。
DMac

我想知道如何避免这种烦人的错误,而又不为最终用户删除/禁用任何功能。
android开发人员

1
在尝试“三星键盘修复”后,我将手机恢复为出厂设置,然后消失了,这似乎对我没有帮助...
Shark

也许这根本不是问题,但是升级到Android 4.1.1后,我在此类日志中看到很多错误。SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度
Sagar Raiyani 2013年

Answers:


240

我在LogCat中遇到了相同的错误条目。就我而言,这是由我使用的第三方键盘引起的。当我将其更改回Android键盘时,该错误条目不再显示。


3
感谢@Rabi,甚至我切换到swiftkey并开始得到错误。
Maulik Sheth

2
在Nexus 7(2012版,运行4.3)上使用普通Android键盘时收到错误消息
Tom,

(在Galaxy S4,4.4.2上)-切换回普通的三星键盘为我解决了此问题。谢谢!
FateNuller 2014年

6
不幸的是,上面@Rabi的链接不再有用。但是谢谢你。我确实在使用SwiftKey,但两年后似乎仍然会导致此问题。
Splaktar 2014年

1
这个问题也出现在Gboard(!)中(并且来自Google)
Aenadon

113

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

您得到的错误不是代码造成的;您可能正在具有Samsung TouchWiz的Samsung设备上进行测试。

我遇到了同样的错误,然后我在Nexus S(也由Samsung进行了测试,但没有TouchWiz的纯Android操作系统)进行了测试,但没有得到此错误。

因此,根据您的情况,在设备上进行测试时只需忽略这些错误!:)


1
它是您的键盘,在您的情况下可能是TouchWiz的键盘。在使用Swiftkey的Nexus 4上,我也遇到了同样的错误,如果我选择默认的Android键盘,这些错误就会消失。
但丁

键盘肯定会导致此错误,但是在不使用或调用键盘的情况下,即在没有EditText的情况下,我看不出键盘怎么可能成为问题的根源。在两个不带EditText的活动之间进行切换时,每次转到其中一个活动时,都会不断收到错误消息。
卡里姆

2
我同意Cookiki的观点,这些错误是由于Samsung TouchWiz引起的,除了在logcat中喷出错误外,它没有引起任何其他问题。因此将忽略它​​们
user2566490 2013年

我们不能仅仅忽略错误,因为它只发生在TouchWiz上,至少向三星报告了touchwiz存在问题。
13年

1
我可以肯定会发生,而不必将其与EditText相关。显示带有某些标题的PreferenceFragment时出现此错误-没有文本框或任何类似内容。从一个PreferenceFragment进行的每次更改,我都会得到其中两个错误消息。从“三星键盘”切换到“ Smart Keyboard Pro”,错误消息停止。
Magnus W

46

查看您的代码,我不确定为什么会收到该错误,但是我有同样的错误,但是带有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

希望这可以帮助!


谢谢你 但是即使删除了TextView并且仅存在布局,我还是收到了错误。这很奇怪。
DMac

从LinearLayout中删除contentDescription没有帮助吗?
2012年

2
没有不幸的是没有。尽管经过进一步调查,该错误似乎仅在三星设备上显示。
DMac

14

在您的Android手机上,转到:
设置->应用程序管理器->所有->三星键盘,然后单击“清除缓存”
(删除此应用程序收集的所有数据)。


哇,我的应用程序缓存了68 MB的内容。:o
XåpplI'-I0llwlg'I -


4

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

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


3

这对我有用...在所有设备上

    <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;
        }
    });

谢谢。像魅力一样工作
swapnil甘地

似乎必须有一个倾听者
AndroidHV

朋友您好,在我的屏幕上不使用任何编辑文本,仅使用线性布局和button.i在平板电脑上运行应用程序时遇到相同的问题(4.1.2)。
Hardik

1

我也有同样的警告,发现删除未使用的@id摆脱了警告。对我来说很明显,因为@id与链接到数据库的不断增长的textViews列表相关联,因此每个条目都有一个警告。


1

Masood Moshref是正确的,发生此错误的原因是由于缺少onCreate()方法中的“ return super.onCreateOptionsMenu(menu)”,Menu的选项菜单未作好准备。


1

要尝试调试此错误,请首先转到您的android终端/控制台并执行以下命令:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

那么如果输出是作为您的应用程序输出的...是导致错误的应用程序。尝试寻找Strings传递到中的空字符layout

我遇到了完全相同的问题,这是我的错,因为我将空白传递String到布局中。更改为后""" "该错误消失了。

如果您没有从控制台输出中获取应用程序,则可能是由其他原因导致的(可能是,正如其他人所说的那样,Android键盘)


0

我也遇到过同样的问题。我几乎浪费了将近两个星期来解决这个问题。最终,我对自己有所怀疑,并尝试通过复制并粘贴一些启动文件(如SplashScreen和LoginScreen)来创建另一个项目。

但是仍然用相同的代码我得到SPAN_EXCLUSIVE_EXCLUSIVE

然后,我从启动屏幕中删除了处理程序代码,然后再次尝试并哇其工作。我在logcat中没有收到SPAN_EXCLUSIVE_EXCLUSIVE问题。

我在想,为什么呢?直到那个时候没有其他解决方案,但是通过从启动屏幕中删除处理程序,它才起作用。

如果无法解决,请尝试在此处进行更新。



0

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


0

我遇到了同样的问题,但是使用了listView。所以正确的代码是R.id.listView2




0

尽量避免使用视图中的XML design.I也有同样的probem但是当我删除了看法。它的工作完美。

例如:

             <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 =“ number”更改为android:inputType =“ text”,或者如果不需要,最好不要使用它。有时键盘卡住了,并且在某些设备中出现错误。


0

在我的情况下,inputType为text / textCapCharacters的EditText字段可以解决此错误。每当我使用退格键完全删除在任何这些字段中键入的文本时,我都会在logcat中注意到这一点。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.