21

私のアクティビティには 2 つのEditTextフィールドと done がありbuttonます。ユーザーがボタンを押したときに、両方のEditTextフィールドのフォーカスが失われるようにします (つまり、どちらのフィールドにもカーソルが表示されないようにする必要があります)。次のコードを使用しています。

final Button saveButton = (Button) findViewById(R.id.saveButton);
    saveButton.setOnClickListener(saveButtonListener);

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
                Text1.clearFocus();
                Text2.clearFocus();

    }

}

ただし、完了ボタンを押すと、まだText1クリックしていなくてもカーソルが表示されますEditText。ボタンのクリックでEditTextフィールドのフォーカスを緩めるにはどうすればよいですか

4

7 に答える 7

29

次のようにコードを変更してみてください。

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
                Text1.clearFocus();
                Text2.clearFocus();
                saveButton.requestFocus(); //or any other View
    }

}

public void clearFocus()についてのドキュメントと同じくらい:

このビューがフォーカスを放棄したいときに呼び出されます。フォーカスがクリアされると、onFocusChanged(boolean、int、android.graphics.Rect)が呼び出されます。

注:ビューがフォーカスをクリアすると、フレームワークは上から最初のフォーカス可能なビューにフォーカスを与えようとします。したがって、このビューが上から最初にフォーカスを取得できる場合、フレームワークがこのビューにフォーカスを与えた後に、フォーカスのクリアに関連するすべてのコールバックが呼び出されます。

Text1レイアウトの最初のビューとして機能するため、ボタンクリック時にフォーカスを他のビューに設定する必要があることを意味します

于 2012-11-30T11:47:41.093 に答える
5

フォーカスを別のビューに移動するだけで、このコードを試すことができます。

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        saveButton.requestFocus(); //any other View
    }

}
于 2012-11-30T12:11:00.980 に答える
4

私が見つけることができる最良の方法は

private void listenToButton(){
    someButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            v.requestFocusFromTouch();
            //Proceed with things
        }
    }
}
于 2015-10-01T01:12:32.587 に答える
1

そのボタンにこれらの行を設定すると、うまくいきます。

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        v.requestFocus();
        ......
    }
};
button.setOnClickListener(listener);

私のために働きます:)

于 2016-10-05T21:29:55.583 に答える
0

EditTextレイアウトに空の非表示要素を作成するだけです。幅0、高さ0の何か。次に、クリックするだけで呼び出すことができますhiddenEditText.requestFocus();

于 2012-11-30T11:49:35.393 に答える
-1

ボタンのクリック時に次のコードを使用します:-

InputMethodManager imm = (InputMethodManager) view.getContext()
    .getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
于 2012-11-30T11:59:42.743 に答える