单击空格按钮可将自动建议添加到EditText Android

时间:2016-08-16 20:16:12

标签: android android-edittext android-softkeyboard

请帮我解决这个奇怪的问题。我尝试实现EditText,用户可以在其中添加指向用户配置文件,主题标签等的链接。我有OnTextChanged方法,我从EditText获取当前文本,处理它并将其放回EditText。

@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

当我输入“Space”时,我收到:(第一个建议在单站“s”之后添加) enter image description here

1 个答案:

答案 0 :(得分:0)

原来,这是三星滑动键盘的问题。当我使用EditText.setText()或EditText.setTextKeepState()将文本设置为编辑文本时,键盘建议表现得很奇怪。解决方案不是将文本设置为EditText,而是将TextWatcher设置为EditText,并在afterTextChanged(Editable s)方法中转换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);
    }
}