Android-SPAN_EXCLUSIVE_EXCLUSIVE 스팬은 길이가 0 일 수 없습니다


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:contentDescription에서 LinearLayout해당 컨테이너가 포커스하지 때문에 설명을 AFAIK를 사용하지 않는 한,.
CommonsWare

6
답변 주셔서 감사합니다. 불행히도이 오류에 대한 스택 추적이 없으며 출력은 위에 게시 한 것과 정확히 같지만 LogCat의 응용 프로그램 필드는 ​​내 응용 프로그램을 가리 킵니다. 코드를 디버깅하고 오류가 발생하지 않고 각 줄을 단계별로 실행 했으므로 Android 코드의 어딘가에없는 무언가가 있어야합니다.
DMac

최종 사용자의 기능을 제거 / 비활성화하지 않고이 성가신 오류를 피하는 방법을 알고 싶습니다.
안드로이드 개발자

1
나는 전화를 공장 설정으로 재설정하고 나에게 트릭을하지 않는 '삼성 키보드 수정'을 시도한 후 사라졌습니다 ...
Shark

아마도 전혀 문제가 아니지만 Android 4.1.1로 업그레이드 한 후 이와 같은 로그에 많은 오류가 표시됩니다. SPAN_EXCLUSIVE_EXCLUSIVE 스팬 길이 제로 가질 수 없습니다
사가르 Raiyani

답변:


241

LogCat에서 동일한 오류 항목이 발생했습니다. 제 경우에는 사용중인 타사 키보드로 인해 발생합니다. Android 키보드로 다시 변경하면 오류 항목이 더 이상 표시되지 않습니다.


3
@Rabi 덕분에, 나는 심지어 swiftkey로 전환하고 errror를 얻기 시작했습니다.
Maulik Sheth

2
Nexus 7 (2012 버전, 4.3 실행)에서 기본 Android 키보드를 사용하는 동안 오류가 발생합니다.
Tom

(갤럭시 S4, 4.4.2에서)-재고 삼성 키보드로 다시 전환하면이 문제가 해결되었습니다. 감사합니다!
FateNuller

6
불행히도 위의 @Rabi 링크는 더 이상 좋지 않습니다. 그러나 이것에 감사합니다. 실제로 SwiftKey를 사용하고 있으며 2 년 후에도 여전히이 문제를 일으키는 것으로 보입니다.
Splaktar

1
이 문제는 Gboard (!)에서도 나타납니다 (Google에서 제공)
Aenadon

113

당신이지고있어 오류가 있기 때문에 하지 관련 EditText, 다음은 것 없는 키보드 관련.

발생하는 오류는 코드의 결과가 아닙니다. 아마도 삼성의 TouchWiz가있는 삼성 장치에서 테스트하고있을 것입니다.

나는 같은 오류가 있었고 Nexus S (Samsung과 TouchWiz가없는 순수한 Android OS)에서 테스트했지만이 오류가 발생하지 않았습니다.

따라서 귀하의 경우 장치에서 테스트하는 동안 이러한 오류를 무시하십시오! :)


1
키보드는 아마도 귀하의 경우 TouchWiz의 키보드 일 것입니다. Swiftkey를 사용하는 Nexus 4에서도 동일한 오류가 발생합니다. 기본 Android 키보드를 선택하면 오류가 사라집니다.
단테

키보드는 분명히이 오류를 유발할 수 있지만 키보드를 사용하거나 호출하지 않은 경우, 즉 EditText가없는 경우 키보드가 어떻게 문제의 원인이 될 수 있는지 알 수 없습니다. EditText없이 두 가지 다른 활동을 전환하면 이러한 활동 중 하나에 갈 때마다 오류가 계속 발생합니다.
Karim

2
Cookiki에 동의합니다.이 오류는 Samsung TouchWiz로 인한 것이며 logcat의 오류를 일으키는 것 이외의 다른 문제는 발생하지 않습니다. 따라서 무시할 것입니다
user2566490

TouchWiz에서만 발생하기 때문에 오류를 무시할 수는 없습니다. 가장 적은 것은 touchwiz에 문제가 있다고 삼성에보고하는 것입니다.
Sojurn

1
EditText와 관련이없는 경우가 가장 확실합니다. 텍스트 상자 나 정렬이없는 헤더가있는 PreferenceFragment를 표시 할 때이 오류가 발생했습니다. 하나의 PreferenceFragment에서 변경 될 때마다이 두 가지 오류 메시지가 나타납니다. "Samsung Keyboard"에서 "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);

안드로이드는 기본적으로 EditText 필드에 제안 사항이 있다고 가정합니다. 그렇지 않으면 오류가 발생합니다. 이 설명에 100 % 확신하지는 않지만 위에서 언급 한 변경 사항으로 인해 문제가 해결되었습니다.

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

도움이 되었기를 바랍니다!


고마워 그러나 TextView가 제거되고 레이아웃 만 존재하더라도 오류가 발생합니다. 매우 이상합니다.
DMac

LinearLayout에서 contentDescription을 제거해도 도움이되지 않습니까?
tim

2
불행히도 아닙니다. 추가 조사를 통해 오류가 Samsung Devices에만 표시되는 것 같습니다.
DMac

14

안드로이드 폰에서
설정-> 응용 프로그램 관리자-> 모두-> 삼성 키보드로 이동 한 다음 "캐시 지우기"를 클릭하십시오
(이 응용 프로그램에서 수집 한 모든 데이터 삭제).


와우 나는 그 응용 프로그램에 의해 캐시 된 68MB의 물건을 가지고있었습니다. : O
XåpplI'-I0llwlg'I-10

11

기본 안드로이드 키보드를 사용해보십시오. 사라질 것입니다


기본 키보드를 사용하는 방법.
NagarjunaReddy

1
전화 입력 설정에서 변경해야합니다. 변경하지 않은 경우 기본 키보드가 있어야합니다. 기본 키보드를 사용하는 것은 매우 재미있는 해결책이지만 저에게 효과적입니다. : : p
Krystian

4
기본 Android 키보드에도 문제가 있습니다 (Nexus 5에서도 사용 가능)
Yoann Hercouet

4

onCreateOptionsMenu 및 onCreate 메소드에 대한 MainAcitivity 값을 전달했는지 확인하십시오.

경우에 따라 개발자는 "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"
        />

자바 코드에서 :

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

안녕하세요 친구, 내 화면에서 텍스트 편집을 사용하지 않고 선형 레이아웃과 버튼 만 사용하십시오. 태블릿 (4.1.2)에서 앱을 실행할 때 동일한 문제가 발생합니다.
Hardik

1

나는 동일한 경고를 받았으며 사용하지 않는 @id를 제거하면 경고가 제거된다는 것을 알았습니다. 나에게 @id가 데이터베이스에 연결된 textViews의 목록과 관련되어 있었으므로 각 항목에 대해 경고가있었습니다.


1

Masood Moshref가 맞습니다.이 오류는 onCreate () 메서드에 "return super.onCreateOptionsMenu (menu)"가 없어서 Menu의 옵션 메뉴가 제대로 준비되지 않았기 때문에 발생합니다.


1

이 오류를 디버깅하려면 먼저 안드로이드 터미널 / 콘솔로 이동하여 다음 명령을 실행하십시오.

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

출력이 앱으로 나오면 오류가 발생한 앱입니다. 에 Strings전달 된 빈 항목을 찾아보십시오 layout.

나는이 똑같은 문제가 있었고 String내 레이아웃에 빈 을 전달할 때 내 잘못이었습니다 . 을 변경 한 후 """ "이 오류 멀리 갔다.

콘솔 출력에서 ​​앱을 얻지 못하면 다른 원인이 될 수 있습니다 (아마도 다른 사람들이 말했듯이 안드로이드 키보드)


0

나는 같은 문제에 직면했다. 이 문제를 해결하는 데 거의 몇 주가 걸렸습니다. 마지막으로 의심의 여지가 있었고 SplashScreen & LoginScreen과 같은 시작 파일을 복사하여 붙여 넣어 다른 프로젝트를 만들려고했습니다.

그러나 동일한 코드로 여전히 SPAN_EXCLUSIVE_EXCLUSIVE 을 얻었 습니다 .

그런 다음 스플래시 화면에서 처리기 코드를 제거하고 다시 시도하고 와우 작동합니다. logcat 에서 SPAN_EXCLUSIVE_EXCLUSIVE 문제가 발생 하지 않습니다 .

왜 궁금해? 시간이 다른 해결책을 얻지 못했을 때까지 스플래시 화면에서 핸들러를 제거하면 작동합니다.

문제가 해결되지 않으면 여기에서 업데이트하십시오.


0

이 문제가 발생하는 화면에 버튼 또는 텍스트보기와 같은 요소가 복제 (두 번 복사)되어 있는지 확인하십시오. 나는 이것을 눈치 채지 못했고 같은 문제에 직면해야했다.


0

인터넷에서 텍스트를 복사 할 때도이 문제가 발생했습니다. 내 해결책은 추가 처리를 수행하기 전에 텍스트를 자르고 서식을 제거하는 것입니다.


0

나는 같은 문제가 있었지만 listView와 함께 .... 나는 잘못된 R.id.listView를 사용했기 때문에 그것을 해결했다. 올바른 코드는 R.id.listView2였습니다.


0

나는 같은 문제가 있었고 다음 코드로 수정했습니다!

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

0

이 오류는 API URL 변경으로 인해 발생합니다. 우편 배달부에서 사용중인 URL을 누르고 시도가 제대로 작동하면 c. API를 다시 확인하면 문제가 해결되었습니다.


0

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"로 변경 하거나 필요하지 않은 경우 사용하지 않는 것이 좋습니다. 때로는 키보드가 멈추고 일부 장치에서 오류가 발생합니다.


0

필자의 경우 inputType이 text / textCapCharacters 인 EditText 필드 에이 오류가 발생했습니다. 백 스페이스를 사용하여 이러한 필드에 입력 한 텍스트를 완전히 제거 할 때마다 logcat에서이 사실을 알았습니다.

나를 위해 일한 해결책은 해당 필드의 inputType을 textNoSuggestions 로 변경하는 것이 가장 적합한 유형 이므로 더 이상 원치 않는 오류가 발생하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.