Merhaba, aradım EditText
ve araştırdım Button
. Aranan metni yazdığımda, arama işlevini etkinleştirmek için arama yerine ekran klavyesindeki ENTER tuşunu kullanmak istiyorum Button
.
Yardım için şimdiden teşekkürler.
Yanıtlar:
Bunu OnKeyListener
, kendi EditText
.
İşte kendi kodumdan bir örnek. Bir adres EditText
adında addCourseText
işlevi arayacak olan addCourseFromTextBox
ya anahtar girmek veya d-pad tıklandığında.
addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
addCourseFromTextBox();
return true;
default:
break;
}
}
return false;
}
});
android:inputType="text"
düzenleme metninin xml'sini , satır başı olan varsayılan klavyeye karşılık enter tuşunu gösterecek şekilde ayarlayabilirsiniz .
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:inputType="text"
android:imeOptions="actionSend" />
Daha sonra EditText öğesi için bir TextView.OnEditorActionListener tanımlayarak eylem düğmesine basılmasını dinleyebilirsiniz. Dinleyicinizde, EditorInfo sınıfında tanımlanan, IME_ACTION_SEND gibi uygun IME eylem kimliğine yanıt verin. Örneğin:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage();
handled = true;
}
return handled;
}
});
Kaynak: https://developer.android.com/training/keyboard-input/style.html
EditText'inize şöyle bir öznitelik ekleyebilirsiniz:
android:imeOptions="actionSearch"
android:inputType="text"
yanı
Kotlin lambda da kullanabiliriz
editText.setOnKeyListener { _, keyCode, keyEvent ->
if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
Log.d("Android view component", "Enter button was pressed")
return@setOnKeyListener true
}
return@setOnKeyListener false
}
Odağın bir sonraki düzenlenebilir alana (eğer varsa) ilerlemesini önlemek için, tuş atma olaylarını yok saymak, ancak tuş oluşturma olaylarını işlemek isteyebilirsiniz. Ayrıca, marjinal olarak daha verimli olacağını varsayarak, önce keyCode'u filtrelemeyi tercih ediyorum. Bu arada, true döndürmenin olayı sizin hallettiğiniz anlamına geldiğini ve başka hiçbir dinleyicinin bunu yapmayacağını unutmayın. Her neyse, işte benim versiyonum.
ETFind.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// do nothing yet
} else if (event.getAction() == KeyEvent.ACTION_UP) {
findForward();
} // is there any other option here?...
// Regardless of what we did above,
// we do not want to propagate the Enter key up
// since it was our task to handle it.
return true;
} else {
// it is not an Enter key - let others handle the event
return false;
}
}
});
bu, nasıl işlediğimi uygulamamdan birinin örneğidir
//searching for the Edit Text in the view
final EditText myEditText =(EditText)view.findViewById(R.id.myEditText);
myEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
(keyCode == KeyEvent.KEYCODE_ENTER)) {
//do something
//true because you handle the event
return true;
}
return false;
}
});
Bunu başarmanın en güncel yolu şudur:
Bunu XML'deki EditText'inize ekleyin:
android:imeOptions="actionSearch"
Ardından Faaliyet / Parçanızda:
EditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Do what you want here
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}