使EDITTEXT失去重心上背衬(make editText lose focus on back

2019-07-17 11:00发布

在我的活动,我有一个EDITTEXT场。 当用户点击就可以了,EDITTEXT获得的焦点,并显示键盘。 现在,当用户按下硬件后退按钮的手机,键盘消失,但光标停留在EDITTEXT,即,它仍然具有焦点。 是否有可能作出的EditText失去焦点当按下后退按钮? 我试着用下面的代码,但它不工作:

@Override
public void onBackPressed() {
    vibrator.vibrate(Constants.DEFAULT_VIBRATE_TIME);
    myEditText.clearFocus();
            super.onBackPressed();
}

Answer 1:

只是延长的EditText:

public class EditTextV2 extends EditText
{
    public EditTextV2( Context context )
    {
        super( context );
    }

    public EditTextV2( Context context, AttributeSet attribute_set )
    {
        super( context, attribute_set );
    }

    public EditTextV2( Context context, AttributeSet attribute_set, int def_style_attribute )
    {
        super( context, attribute_set, def_style_attribute );
    }

    @Override
    public boolean onKeyPreIme( int key_code, KeyEvent event )
    {
        if ( event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP )
            this.clearFocus();

        return super.onKeyPreIme( key_code, event );
    }
}

而在XML只是使用<yourPackage.EditTextV2>代替<EditText>

注意:您可能需要添加/删除构造这个类视分钟API需要支持。 我建议只是将他们全部和删除其的那些super()调用获得红色下划线。



Answer 2:

你可以让你的另一的Views可聚焦,例如ImageView 。 一定要使其在触摸模式可聚焦,使用setFocusableInTouchMode(true)onResume()作出这样的ViewrequestFocus()

也可以创建一个虚拟View 0的尺寸和执行上述相同的步骤。

我希望这有帮助。



Answer 3:

添加类似下面的比你高的EditText观点:

<LinearLayout
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

还隐藏键盘onBackPressed()补充一点:

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(myEditText.getWindowToken(), 0);


Answer 4:

对于使用科特林材料设计的人,你可以这样做:

class ClearFocusEditText: TextInputEditText {
    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    override fun onKeyPreIme(keyCode: Int, event: KeyEvent?): Boolean {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            clearFocus()
        }

        return super.onKeyPreIme(keyCode, event)
    }
}


Answer 5:

这可能是一个可能的解决方案:

EditText et;
et.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if(i == KeyEvent.KEYCODE_BACK) {
                et.clearFocus();
                return true;
            }
            else return false;
        }
    });


文章来源: make editText lose focus on back press