1

EditTextと2つのボトムを表示しているアクティビティがあります。

EditTextをタップすると、Android仮想キーボードが表示され、テキストを入力できるようになります。さて、下をタップする前に、キーボードを非表示にしたいと思います。画面をタップしてやりたいです。

私はここでいくつかの同様の質問を伴うstackoverflowの投稿を見ましたが、それは機能しているようには見えません。リスナーを設定しようとしました:

   // Create an anonymous implementation of OnFocusChangeListener
   private OnFocusChangeListener mFocusListener = new OnFocusChangeListener() {
       public void onFocusChange(View v, boolean b) {
          // do something when the focus changes
        hideSoftKeyboard(v);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setupUI(findViewById(R.id.parent));
        EditText editText = (EditText) findViewById (R.id.edit_message);
        editText.setOnFocusChangeListener(mFocusListener);
        setContentView(R.layout.activity_main);
    }

また、onTouchイベントをテキストビューではないすべてのビューに再帰的に関連付ける親アクティビティを作成しようとしましたが、テキストビューのみが登録されます(このコードは別のstackoverflow投稿から取得しました)

    public void setupUI(View view) {

    //Set up touch listener for non-text box views to hide keyboard.
    if(!(view instanceof EditText)) {

        view.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(v);
                return false;
            }

        });
    }

    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {

        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

            View innerView = ((ViewGroup) view).getChildAt(i);

            setupUI(innerView);
        }
    }
}

これに対するまっすぐな解決策はありますか?これを行うためのより簡単な方法がないことを私は信じることができません。Gingerbread API(APIレベル10)を使用しています

ありがとう

4

2 に答える 2

4

わかりました、これを非常に簡単な方法で行う方法を見つけました: XML レイアウト定義です。Layout は ViewGroup であるため、イベントを実装できます。レイアウトのクリックを処理するメソッドを定義します (hideSoftKeyboard)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" 
    android:id="@+id/main_layout" 
    android:onClick="hideSoftKeyboard" >

そして、これが私がメソッドを実装した方法です:

public void hideSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager)  getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
于 2012-12-05T00:14:15.220 に答える
0

同じ目的で次の方法を使用しました

private void hideKeypad(){
    EditText edtView=(EditText)findViewById(R.id.username);

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(edtView.getWindowToken(), 0);
}
于 2012-12-04T08:30:18.107 に答える