55

EditTextは時間を示すものを持っています。ユーザーがクリックした後、EditTextを表示したいTimePickerDialogので、をに設定View.OnClickListenerしますEditText

しかし、OnClickListenerは奇妙な動作をしています。タッチするEditTextと、ソフトウェアキーボードが表示されます(これは不要です)。もう一度タッチすると、OnClickListener.onClick()やっと呼び出されてダイアログが表示されます。

ダイアログをすぐに表示したい場合はどうすればよいですか?

4

6 に答える 6

121

他のほとんどのコントロールとは異なりEditText、システムが「タッチモード」のときにフォーカス可能です。最初のクリックイベントはコントロールに焦点を合わせ、2番目のクリックイベントは実際にを起動しOnClickListenerます。android:focusableInTouchModeView属性でタッチモードフォーカスを無効にすると、OnClickListener期待どおりに起動するはずです。

<EditText
        android:text="@+id/EditText01"
        android:id="@+id/EditText01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="false" />
于 2010-02-17T22:39:17.403 に答える
53

別の解決策は、ontouchlistener:を使用することです。

edittext.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(MotionEvent.ACTION_UP == event.getAction()) {
            mQuaternion_1.setText("" + mQ1);
        }

        return true; // return is important...
    }
});

それが返される場合true、イベントは処理され、キーボードはポップアップしません。キーボードを引き続きポップアップして登録クリックしたい場合は、キーボードを返しfalseます。

于 2012-08-28T17:38:12.773 に答える
3

ユーザーが実際にEditTextを入力できるようにしたくないようです。あなたは彼らがタイムピッカーを介して時間を選ぶことができるようにしたいだけです。では、TimePickerDialogをポップアップするボタンだけではどうでしょうか。選択された時刻をTextViewに表示できます。

または、EditTextビューをTimePickerビュー(ダイアログではなく、通常のビュー)に置き換えることもできます。

于 2010-01-22T17:23:11.483 に答える
2

私は次のようなカスタマイズされたボタンを使用してこれを解決しました:

<Button
        android:id="@+id/btTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:text="test"
        android:textSize="20dp"
        android:background="@android:drawable/edit_text" />
于 2010-01-22T22:14:53.113 に答える
2

タッチリスナーの代わりに、テキスト変更リスナーを使用します。

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //yourFunction();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
于 2018-03-13T05:59:22.373 に答える
1

私が正しく理解していれば、あなたはただのようなものが必要です

<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:clickable="true" android:inputType="none" />

編集およびクリックできません。を設定OnClickListenerすれば完了です。理論的には、実際には追加する必要があります

android:editable="false" 

これは非推奨ですが、トリックを実行します。

于 2010-01-22T19:48:25.663 に答える