Jak zrobić coś po kliknięciu przez użytkownika na mój EditText
Mam EditText
, który pokazuje czas. Po kliknięciu EditText
chcę pokazać TimePickerDialog
, więc ustawiam View.OnClickListener
na mój EditText
.
Ale OnClickListener
zachowuje się dziwnie - dotykam EditText
i pojawia się klawiatura programowa (której nie chcę). Gdy dotknę ponownie, OnClickListener.onClick()
zostanie wywołane i pojawi się okno dialogowe.
Co zrobić, jeśli chcę, aby okno dialogowe pojawiło się natychmiast?
6 answers
W przeciwieństwie do większości innych elementów sterujących, EditText
S są ustawiane na ostrość, gdy system jest w "trybie dotykowym". Zdarzenie pierwszego kliknięcia skupia kontrolkę, podczas gdy zdarzenie drugiego kliknięcia powoduje wywołanie OnClickListener
. Jeśli wyłączysz ustawianie ostrości w trybie dotykowym za pomocą atrybutu widoku android:focusableInTouchMode
, OnClickListener
powinien zostać uruchomiony zgodnie z oczekiwaniami.
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 21:03:04
Innym rozwiązaniem jest użycie 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...
}
});
Jeśli zwróci true
zdarzenie jest obsługiwane i klawiatura nie będzie wyskakiwać. Jeśli chcesz, aby klawiatura nadal wyskakiwała i klikała Rejestracja, musisz ją zwrócić false
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-29 07:55:10
Wygląda na to, że nie chcesz, aby użytkownik faktycznie mógł wpisywać EditText. Chcesz tylko, aby mogli wybrać czas za pomocą time picker. Więc dlaczego nie wystarczy przycisk, który wyskakuje TimePickerDialog? Możesz wyświetlić czas, który został wybrany w widoku tekstowym.
LUB możesz po prostu zastąpić Widok EditText widokiem TimePicker (Nie okno dialogowe, tylko zwykły widok).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 17:23:11
Rozwiązałem to za pomocą dostosowanego przycisku, takiego jak ten:
<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" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 21:03:44
Zamiast Touch Listener użyj Text Change Listener:
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) {
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-13 05:59:22
Jeśli dobrze rozumiem, potrzebujesz czegoś w rodzaju
<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" />
Nie można edytować i klikać. Ustaw OnClickListener
i gotowe.
W teorii, w praktyce należy dodać zbyt
android:editable="false"
Który jest przestarzały, ale robi sztuczkę.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 20:02:45