25

私のアクティビティには、editText フィールドがあります。ユーザーがそれをタップすると、editText がフォーカスを取得し、キーボードが表示されます。ここで、ユーザーが電話機のハードウェアの戻るボタンを押すと、キーボードは消えますが、カーソルは Edittext に残ります。つまり、まだフォーカスがあります。戻るボタンが押されたときに EditText がフォーカスを失うようにすることは可能ですか? 次のコードを使用してみましたが、うまくいきませんでした。

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

6 に答える 6

24

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 ( key_code == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP )
            this.clearFocus();

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

そしてxml<yourPackage.EditTextV2>では、代わりに<EditText>.

注:サポートしている最小 API によっては、このクラスにコンストラクターを追加/削除する必要がある場合があります。super()それらをすべて追加し、呼び出しに赤の下線が引かれているものを削除することをお勧めします。

于 2016-12-15T20:58:18.760 に答える
2

のように、別のものをViewsフォーカス可能にすることができますImageViewsetFocusableInTouchMode(true)と ononResume()を使用して、必ずタッチ モードでフォーカス可能にしViewますrequestFocus()

また、次元が 0 のダミーViewを作成して、上記と同じ手順を実行することもできます。

これが役立つことを願っています。

于 2012-12-20T16:56:08.887 に答える
0

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);
于 2012-12-21T06:21:41.023 に答える