【问题标题】:Android - SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero lengthAndroid - SPAN_EXCLUSIVE_EXCLUSIVE 跨度的长度不能为零
【发布时间】:2012-11-20 03:48:35
【问题描述】:

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

<?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 并查看与您的错误相关的堆栈跟踪。如果确实来自此应用程序,请将整个堆栈跟踪作为对您问题的编辑发布。另外,我会从LinearLayout 中删除android:contentDescription,因为该容器不可聚焦,因此不会使用AFAIK 的描述。
  • 感谢您的回复。不幸的是,这个错误没有堆栈跟踪,输出与我上面发布的完全一样,但 LogCat 中的应用程序字段确实指向我的应用程序。我已经调试了代码并逐行执行了每一行,没有抛出任何错误,所以它一定是在 Android 代码中的某个地方,它期望一些不存在的东西。
  • 我也想知道如何避免这个恼人的错误,而不需要为最终用户删除/禁用任何功能。
  • 我将手机重置为出厂设置,但在尝试了“三星键盘修复”后它消失了,这似乎对我没有用...
  • 也许这根本不是问题,但是在升级到 Android 4.1.1 之后,我在日志中看到了很多类似这样的错误。 SPAN_EXCLUSIVE_EXCLUSIVE 跨度的长度不能为零

标签: java android


【解决方案1】:

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

【讨论】:

  • 感谢@Rabi,即使我切换到 swiftkey 并开始出现错误。
  • 在 Nexus 7(2012 版,运行 4.3)上使用普通 Android 键盘时出现错误
  • (在 Galaxy S4,4.4.2 上)- 切换回普通的三星键盘为我解决了这个问题。谢谢!
  • 不幸的是,上面@Rabi 的链接不再好。但谢谢你。我确实在使用 SwiftKey,2 年后它似乎仍然会导致这个问题。
  • 这个问题也出现在 Gboard(!) 中(来自 Google)
【解决方案2】:

因为您收到的错误EditText相关,所以它与您的键盘相关。

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

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

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

【讨论】:

  • 这是你的键盘,在你的情况下可能是 TouchWiz 的键盘。我在带有 Swiftkey 的 Nexus 4 上遇到了同样的错误,如果我选择默认的 Android 键盘,错误就消失了。
  • Keyboards 肯定会导致这个错误,但是在不使用或不调用键盘的情况下,即在没有EditText的情况下,我看不到键盘如何问题的根源。当我在两个不同的活动之间切换时,都没有 EditText,每次我去其中一个活动时都会收到错误。
  • 我同意 Cookiki 的观点,这些错误是由三星 TouchWiz 引起的,除了在 logcat 中出现错误之外,它不会引起任何问题。所以会忽略它们
  • 我们不能忽略错误,因为它只发生在 TouchWiz 上,至少会向三星报告 touchwiz 有问题。
  • 我当然可以在不与 EditText 相关的情况下发生。显示带有一些标题的 PreferenceFragment 时出现此错误 - 没有文本框或任何类似的东西。在一个 PreferenceFragment 的每一次更改中,我都会收到两条这样的错误消息。从“三星键盘”切换到“智能键盘专业版”,错误消息停止。
【解决方案3】:

查看您的代码,我不确定您为什么会收到该错误,但我遇到了同样的错误,但使用了 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 并且只有布局存在,我也得到了错误。很奇怪。
  • 从 LinearLayout 中删除 contentDescription 没有帮助?
  • 不,很遗憾没有。尽管经过进一步调查,该错误似乎只显示在三星设备上。
【解决方案4】:

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

【讨论】:

  • 哇,我有 68 MB 的东西被那个应用程序缓存了。 :O
【解决方案5】:

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

【讨论】:

  • 如何使用默认键盘。
  • 您必须在手机输入设置中进行更改。如果你没有改变它,你应该有默认键盘。使用默认键盘这是一个非常有趣的解决方案,但它适用于我..:p
  • 默认的Android键盘也有问题(我在Nexus 5上有)
【解决方案6】:

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

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

【讨论】:

    【解决方案7】:

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

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

    【讨论】:

    • 谢谢。像魅力一样工作
    • 似乎有一个听众是必须的
    • 你好朋友,在我的屏幕上没有使用任何编辑文本,只使用线性布局和按钮。当我在平板电脑上运行应用程序时遇到同样的问题(4.1.2)。
    【解决方案8】:

    我有同样的警告,发现删除未使用的@id 消除了警告。对我来说很明显,@id 与越来越多的链接到数据库的 textView 列表相关联,因此每个条目都有一个警告。

    【讨论】:

      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

        ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)
        

        那么如果输出作为您的应用程序出现......这是您的应用程序导致错误。尝试查找您传递给layout 的空Strings

        我遇到了同样的问题,这是我的错,因为我将一个空的 String 传递到我的布局中。将"" 更改为" " 后,此错误消失了。

        如果您没有从控制台输出中获取您的应用程序,那么它是由其他原因造成的(可能,正如其他人所说,android 键盘)

        【讨论】:

          【解决方案11】:

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

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

          然后我从初始屏幕中删除了处理程序代码并再次尝试,哇它的工作。 我在 logcat 中没有遇到 SPAN_EXCLUSIVE_EXCLUSIVE 问题。

          我想知道,为什么会这样?直到当时没有得到任何其他解决方案,但通过从启动屏幕中删除处理程序它正在工作。

          如果已解决,请在此处尝试更新。

          【讨论】:

            【解决方案12】:

            检查您在遇到此问题的屏幕中是否有任何元素(例如按钮或文本视图)重复(复制了两次)。我没有注意到这一点,不得不面对同样的问题。

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

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

                【讨论】:

                  【解决方案15】:

                  我遇到了同样的问题,然后我通过以下代码解决了它!

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

                  【讨论】:

                    【解决方案16】:

                    由于 API URL 更改,也会发生此错误。如果它工作正常,请尝试点击您在邮递员和 c 中使用的 URL。 重新检查 API 解决了我的问题

                    【讨论】:

                      【解决方案17】:

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

                      例如:

                                   <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" 或者如果不需要,最好不要使用它。有时键盘卡住并在某些设备中出错。

                      【讨论】:

                        【解决方案18】:

                        在我的例子中,输入类型为 text / textCapCharacters 的 EditText 字段正在处理此错误。每当我使用退格键完全删除在任何这些字段中键入的文本时,我都会在我的 logcat 中注意到这一点。

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

                        【讨论】:

                          【解决方案19】:

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

                          【讨论】:

                            【解决方案20】:
                            **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) {
                                    }
                                })
                            

                            【讨论】:

                              【解决方案21】:

                              要解决这个问题,只需在 ..\app\src\main 的 AndroidManifest.xml 文件中添加 android:usesCleartextTraffic="true" \AndroidManifest.xml 就像下面这样......

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 2012-12-20
                                • 2013-03-28
                                • 2012-11-09
                                • 1970-01-01
                                • 2013-01-19
                                • 1970-01-01
                                • 1970-01-01
                                • 2017-10-21
                                相关资源
                                最近更新 更多