2016-08-16 54 views
0

請幫我解決這個奇怪的問題。我嘗試實現EditText,用戶可以在其中添加指向用戶配置文件,主題標籤等的鏈接。我有OnTextChanged方法,我從EditText獲取當前文本,處理它並將其放到EditText後面。空間按鈕點擊放置自動建議到EditText Android

@OnTextChanged(R.id.share_article_say_something) 
    public void onTextChanged() { 
     if (mIsTextChangedManually) { 
      mIsTextChangedManually = false; 
      return; 
     } 
     mIsTextChangedManually = true; 
     SpannableStringBuilder builder = mCommentsSpannable.format(mSaySomethingTv.getText().toString()); 
     mSaySomethingTv.setTextKeepState(builder); 
    } 

EditText上看起來像

<com.slangwho.views.SWEditText 
      android:id="@+id/share_article_say_something" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="left" 
      android:textColor="@color/black" 
      android:textColorHint="@color/my_friend_pressed_color" 
      android:background="@android:color/transparent" 
      android:textSize="@dimen/splash_screen_button_text_sp" 
      android:hint="@string/say_something" 
      android:layout_margin="10dp" 
      android:imeOptions="actionDone" 
      android:textCursorDrawable="@drawable/ed_cursor_drawable_black" 
      app:fontName="ProximaNova-Regular"/> 

此擴展的EditText定期的EditText只需添加1個額外的參數,它的fontName。

當我鍵入一些文字,我收到錯誤的建議(光標後單站立「S」) enter image description here

當我鍵入「空間」,我得到:(第一個建議後單站立「S」加) enter image description here

回答

0

事實證明,這是三星Swipe鍵盤的問題。當我使用EditText.setText()或EditText.setTextKeepState()將文本設置爲編輯文本時,鍵盤建議表現很奇怪。解決方案不是將文本設置爲EditText,而是將TextWatcher設置爲EditText,並在方法afterTextChanged(可編輯)之後轉換Editable。

public class SocialTextWatcher implements TextWatcher { 

    CommentsSpannable mCommentSpannable; 

    public SocialTextWatcher(CommentsSpannable commentsSpannable) { 
     mCommentSpannable = commentsSpannable; 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 


    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 


    @Override 
    public void afterTextChanged(Editable s) { 
     mCommentSpannable.formatEditable(s); 
    } 
}