2017-01-14 1 views
1

특정 위젯에 대한 사용자 입력을 통해 이미지 스팬 입력을 지원하고 이상한 문제가 발생하는 EditText 클래스를 사용하고 있습니다. 이미지 스팬이 줄 끝 부분에 나타나면 다음 줄로 넘어가는 경우 이미지 스팬이 더 이상 보이지 않게됩니다.다음 줄로 넘어갈 때 EditText + ImageSpan이 사라짐

즉 이전 : Before the issue

내가 입력을 마친 후 "작동하지 않습니다." 편집 텍스트는 다음과 같이 나타납니다 : After issue is produce

기본적으로 다중 행 편집 텍스트에서 다음 행으로 이동하는 것과 관련하여 이미지 스팬이 편집 텍스트에 의해 올바르게 처리되지 않는 것으로 보입니다. 이월 된 후에는 사용자에게 보이지 않습니다. 두 번째 이미지의 내용을 첫 번째 이미지 ("n"까지)와 똑같이 보일 때까지 되돌릴 수 있고 이미지 스팬을 다시 볼 수 있습니다.

누구든지이 문제를 해결하기 위해 무엇을 할 수 있는지 알고 있습니까? 내 응용 프로그램에서 계속 유지하고자하는 중요한 구성 요소입니다. 또한 한 줄 편집 텍스트로 대체 할 수 없으며 여러 줄 문자 지원도 중요합니다.

public void appendSpannedText(String s){ 
    if (textToDrawableMap == null || textToDrawableMap.isEmpty() 
      || !textToDrawableMap.containsKey(s)) { 
     return; 
    } 

    // Acquire the mapped drawable 
    Drawable drawable = textToDrawableMap.get(s); 

    Editable editable = getText(); 
    int start = getSelectionStart(); 

    // Insert the a space at the start that's eaten by the image span 
    // being set. 
    editable = editable.insert(start, SPACE); 

    // Insert the new string at the starting point 
    SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(editable); 

    // Create the span and set the new span to the appropriate range 
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 
    ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); 

    int nextIdx = start + 1; 
    spannableStringBuilder.setSpan(span, 
      start, nextIdx, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    // Update the spanned text and the cursor 
    setText(spannableStringBuilder); 
    setSelection(nextIdx); 
} 

난 그냥 사용자가 누를 수있는 몇 가지 아이콘이하고 삽입을 통해 사용자 정의 편집 텍스트에 이미지 범위입니다 : 재현성

, 여기에 내 텍스트를 편집에 ImageSpan를 추가하는 내 코드입니다 spannable. 내가 지원하는 텍스트 -> 드로어 블 매핑을 사용하므로 사용자가 특정 버튼을 눌렀을 때 어느 것을 사용할 지 알 수 있습니다. 주된 것은 edittext에 이미지 판이 있다면 트리거되었을 때 새로운 라인에서 보이지 않게 될 수 있다는 것입니다. setSpan 전에

답변

0

장소이 :

spannableStringBuilder.append("\r"); 
+0

해결책을 찾았습니까? 나는 똑같은 문제를 겪고있다. 나는 여기에이 해결책을 원합니다. – rawcoder064

+0

@ rawcoder064 [link] (https://github.com/maxsav/spantest) –

+0

문제를 해결했습니다. 문제는 첫 번째 및 마지막 공백을 텍스트보기로 트리밍하는 것이 었습니다. 공간 대신 ​​문자를 추가하면 해결됩니다. 어쨌든 고마워. – rawcoder064

0

나는 글고와 같은 문제가되었다.

이전 주석에서 말한 것처럼 이것은 공백 문자 때문에 발생합니다. EditText이 새 줄로 바뀌면 은 공백 인 경우 이전 줄의 마지막 문자를 제거합니다 (). 따라서 이러한 일이 발생하지 않도록하려면 다른 것을 사용해야합니다. 대신이의

editable = editable.insert(start, SPACE); 

, 우리는 다음 코드를 작성해야합니다 :

는 이전 코드에서 우리는이 있었다 anyCharacter "가"의 다른 문자

editable = editable.insert(start, anyCharacter); 

.

관련 문제