時間を示すEditText
があります。ユーザーがEditText
をクリックした後、TimePickerDialog
を表示したいので、EditText
に_View.OnClickListener
_を設定します。
しかし、OnClickListener
の動作がおかしい-EditText
をタッチすると、ソフトウェアキーボードが表示されます(これは望ましくありません)。もう一度タッチすると、OnClickListener.onClick()
が最後に呼び出され、ダイアログが表示されます。
ダイアログをすぐに表示するにはどうすればよいですか?
他のほとんどのコントロールとは異なり、EditText
sは、システムが「タッチモード」のときにフォーカス可能です。最初のクリックイベントはコントロールにフォーカスし、2番目のクリックイベントは実際にOnClickListener
を発生させます。 Android:focusableInTouchMode
ビュー属性でタッチモードフォーカスを無効にすると、OnClickListener
が期待どおりに起動するはずです。
<EditText
Android:text="@+id/EditText01"
Android:id="@+id/EditText01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:focusableInTouchMode="false" />
別の解決策は、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
を返します。
ユーザーが実際にEditTextを入力できるようにしたくないようです。時間ピッカーで時間を選択できるようにしたいだけです。では、なぜTimePickerDialogをポップアップするボタンだけではないのでしょうか?選択した時間をTextViewで表示できます。
または、EditTextビューを TimePicker ビュー(ダイアログではなく、通常のビュー)に置き換えることもできます。
タッチリスナーの代わりに、テキスト変更リスナーを使用します。
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) {
}
});
このようなカスタマイズされたボタンを使用してこれを解決しました:
<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" />
私が正しく理解していれば、次のようなものが必要です
<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"
これは非推奨ですが、トリックを行います。