web-dev-qa-db-ja.com

Android開発:onKeyUpの使い方?

私はAndroid=開発に不慣れです。onKeyUpリスナーの使用方法に関する適切なガイドを見つけられないようです。

私のアプリには大きなEditTextがあり、誰かがそのEditTextでキーを押して離したときに、そのEditTextで正規表現を実行する関数を呼び出します。

OnKeyUpの使い方を知りません。誰か教えてくださいませんか?

18
AlexPriceAP

非常に正しい方法は、TextWatcherクラスを使用することです。

EditText tv_filter = (EditText) findViewById(R.id.filter);

TextWatcher fieldValidatorTextWatcher = new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (filterLongEnough()) {
                populateList();
            }
        }

        private boolean filterLongEnough() {
            return tv_filter.getText().toString().trim().length() > 2;
        }
    };
    tv_filter.addTextChangedListener(fieldValidatorTextWatcher);
29
Damjan

補正:

しばらくの間、一般的なonKeyListenerを使用しました。コードが2回呼び出されていることにすぐに気づきました。キーを1回押すと1回、キーを上げると1回です。次のリスナーを使用して、コードを1回だけ呼び出します。 "if (event.getAction() == KeyEvent.ACTION_UP)"がキーです。

_OnKeyListener keyListener = new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            //do something here
        }
        return false;
    }
};
_

アクティビティのすべてのコントロールでonKeyUp()が自動的に呼び出されることがわかりました。これが必要な場合は、onCreate()を追加するのと同じように、アクティビティに追加します

例:

_public boolean onKeyUp(int keyCode, KeyEvent event) {
    //do something here
    return false;
};
_

私はこれが古い質問であることを知っていますが、これは同じ問題を持つ他の人を助けるでしょう。

11
R Hughes

次のコードの使用を検討してください。

 @Override 
 public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    } }

ここで、最後にsuper.onkeyUpメソッドを呼び出しました。これは、ユーザーが有効なキーを押さなかったときにイベントを処理します。

詳細については、次の link を検討してください。

1
cammando

EditTextのみ。 setOnClickListener()自体によって達成されます。 onKeyUp()は不要です。クリック/タッチイベントによって実行されるためです。正しい?ただこれをしなさい。

edittext_object.setOnClickListener(new OnClickListener() {
     public void onClick(View v) {
    //do what you need 
    }
}
0
Praveen

私の頭からこれを書きますが、それは次の行の中にあるはずです:

text.setKeyListener(new KeyListener() {
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {


        if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent


        return super.onKeyUp(keyCode, event);
    }
});
0
Milan

タッチせずにハードキーパッドボタン(キーボード)を備えたデバイスを使用する場合は、このコードを使用して、左右に移動するイベントを制御します。 onKeyupは次のボタンイベントを返すため、onKeyUpではなくonkeyDownを使用します。

        Button myButton = (Button) findViewById(R.id.my_btn);
        myButton .setKeyListener(new KeyListener() {
        @Override
        public int getInputType() {
            return 0;
        }

        @Override
        public boolean onKeyDown(View view, Editable editable, int keyCode, KeyEvent keyEvent) {
            Log.d("myTag", "onKeyDown code: " +keyCode);
            switch (keyCode) {
                case KeyEvent.KEYCODE_DPAD_RIGHT:
                    // USER_MOVE_RIGHT();
                    return true;
                case KeyEvent.KEYCODE_DPAD_LEFT:
                    //USER_MOVE_LEFT());
                    return true;
                case KeyEvent.KEYCODE_DPAD_DOWN:
                    //USER_MOVE_DOWN());
                    return true;
                case KeyEvent.KEYCODE_DPAD_UP:
                    //USER_MOVE_UP();
                    return true;
                case KeyEvent.KEYCODE_DPAD_CENTER:
                    //USER_Press_OK()
                    return true;
                               }
            return false;
        }
0
Udi Reshef