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 и без него, и ошибка все еще остается, я должен делать что-то принципиально неправильное для такого базового макета, чтобы вызвать это.

Есть ли у кого-нибудь идеи о том, как я могу загрузить это без ошибок?

Ответ 1

Я запустил те же записи ошибок в LogCat. В моем случае это вызвано третьей стороной клавиатуры, которую я использую. Когда я меняю его на клавиатуру Android, запись об ошибке больше не отображается.

Ответ 2

Поскольку ошибка, которую вы получаете, это не, связанная с EditText, а затем не, связанная с вашей клавиатурой.

Ошибки, которые вы получаете, не являются результатом вашего кода; вы, вероятно, тестируете устройство Samsung, имеющее Samsung TouchWiz.

У меня были те же ошибки, затем я тестировал Nexus S (также Samsung, но чистую ОС Android без TouchWiz), и я не получил эту ошибку.

Итак, в вашем случае просто игнорируйте эти ошибки во время тестирования на устройстве!:)

Ответ 3

Глядя на ваш код, я не уверен, почему вы получаете эту ошибку, но у меня была такая же ошибка, но с полями EditText.

Изменение android:inputType="text" (или любых других изменений текста вводаType) на 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

Надеюсь, это поможет!

Ответ 4

На вашем телефоне Android выберите:
→ Диспетчер приложений → все → клавиатура samsung, а затем нажмите "Очистить кеш"
(удалите все данные, собранные этим приложением).

Ответ 5

Попробуйте использовать клавиатуру Android по умолчанию, она исчезнет

Ответ 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;
        }
    });

Ответ 8

У меня было такое же предупреждение, и я обнаружил, что удаление неиспользуемого @id избавилось от предупреждения. Для меня это было очевидно, так как @id ассоциировался с растущим списком textViews, связанным с базой данных, поэтому для каждой записи было предупреждение.

Ответ 9

Масуд Мошреф прав, эта ошибка возникает из-за того, что меню опций меню плохо подготовлено из-за отсутствия "return super.onCreateOptionsMenu(menu)" в методе onCreate().

Ответ 10

Чтобы попытаться отладить эту ошибку, сначала перейдите на свой терминал/консоль android и выполните следующую команду:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

то если выход выйдет как ваше приложение... это ваше приложение вызывает ошибку. Попробуйте найти пустой Strings, который вы передадите в layout.

У меня была такая же проблема, и это была моя ошибка, когда я пропускал пустой String в мой макет. После изменения "" до " " эта ошибка исчезла.

Если вы не получите свое приложение из вывода консоли, то это что-то еще вызывает его (возможно, как говорили другие, клавиатура Android)

Ответ 11

Я столкнулся с той же проблемой. Я почти потратил впустую почти пару недель, чтобы решить эту проблему. Наконец, я сомневался в себе и попытался создать другой проект, скопировав и вставив некоторые файлы запуска, такие как SplashScreen и LoginScreen.

Но с тем же кодом все еще я получал SPAN_EXCLUSIVE_EXCLUSIVE.

Затем я удалил код обработчика из заставки и снова попытался, и Wow его работала. Я не получаю проблему SPAN_EXCLUSIVE_EXCLUSIVE в logcat.

Интересно, почему это так? до тех пор, пока время не получило никакого другого решения, но удалив обработчик с экрана заставки, он работает.

Попробуйте и обновите здесь, если он разрешен или нет.

Ответ 12

Проверьте, есть ли у вас какой-либо элемент, такой как кнопка или текстовый вид, дублированный (скопированный дважды) на экране, где это происходит. Я сделал это незаметно и столкнулся с тем же вопросом.

Ответ 13

Я столкнулся с этой проблемой, когда я скопировал какой-то текст из Интернета. Мое решение состоит в том, чтобы обрезать текст/удалить форматирование перед дальнейшей обработкой.

Ответ 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

эта ошибка также возникает из-за изменения URL-адреса API. попробуйте нажать на URL, который вы используете в почтальоне, и c, если он работает правильно. перепроверка API решила мою проблему

Ответ 17

попробуйте не использовать представление в 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 = "number" на android: inputType = "text" или лучше не использовать его, если не требуется. Иногда клавиатура застревает и получает ошибку в некоторых устройствах.

Ответ 18

В моем случае поля EditText с inputType как text/textCapCharacters были причиной этой ошибки. Я заметил это в своем logcat, когда использовал backspace, чтобы полностью удалить текст, введенный в любое из этих полей.

Решение, которое работало для меня, состояло в том, чтобы изменить inputType этих полей на textNoSuggestions, так как это был наиболее подходящий тип и не дал мне никаких нежелательных ошибок amymore.

Ответ 19

Я также сталкиваюсь с этой ошибкой в ​​Logcat. Для решения этой проблемы также потребуется 1 день, но в нашем коде нет какой-либо большой ошибки.

Решение: добавьте эту активность в файл Manifest.xml приложения.

код:

<activity android:name="com.example.youappname.activityname" > </activity>

Добавьте все действия приложения в манифест, как это.

Попробуйте решить проблему.