2

画面からキーボードを削除するイベントをキャッチしようとしていますが、次のコードを使用しています:

    searchTextField.setOnEditorActionListener(new OnEditorActionListener()
    {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
        {

            System.out.println("ACTION ID " + actionId);

            if(actionId == EditorInfo.IME_ACTION_DONE)
            {
                System.out.println("ACTION DONE!!!!!!!!!!");
                return true;
            }

            return false;
        }

   searchTextField.setOnFocusChangeListener( new View.OnFocusChangeListener()
    {
        public void onFocusChange(View v, boolean hasFocus) 
        {
              if (hasFocus)
                  System.out.println("HAS FOCUS");
              else
                  System.out.println("FOCUS LOST");
        }
    });

しかし、残念ながらうまくいきません。onEditorAction編集を開始しても終了しても、電話をかけたことはありません。メソッドに関してonFocusChangeは、キーボードが上がったときに初めて呼び出されます。キーボードが下がったとき、または 2 回目に上がったときは呼び出されません。誰が私が間違っているのか説明できますか?

4

1 に答える 1

1

アクティビティ rootView で GlobalLayoutListener を使用して、キーボードが非表示か表示かを確認しました。

次のように機能します。

final View activityRootView = findViewById(R.id.activityRoot);
    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
            if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                ... do something here
            }
         }
    });
于 2013-03-04T14:34:23.430 に答える