Saya mendapat pertanyaan yang relatif sederhana. Saya memiliki aktivitas dengan banyak EditText di dalamnya. Saat saya membuka aktivitas, secara otomatis fokus ke EditText pertama dan menampilkan keyboard virtual.
Bagaimana cara mencegahnya?
Saya mendapat pertanyaan yang relatif sederhana. Saya memiliki aktivitas dengan banyak EditText di dalamnya. Saat saya membuka aktivitas, secara otomatis fokus ke EditText pertama dan menampilkan keyboard virtual.
Bagaimana cara mencegahnya?
Jawaban:
Gunakan atribut ini di tag tata letak Anda dalam file XML:
android:focusable="true"
android:focusableInTouchMode="true"
Seperti yang dilaporkan oleh anggota lain dalam komentar, ini tidak berfungsi, ScrollView
oleh karena itu Anda perlu menambahkan atribut ini ke turunan utama ScrollView
.
Anda dapat menambahkan ini ke aktivitas Manifes Android Anda:
android:windowSoftInputMode="stateHidden|adjustResize"
android:windowSoftInputMode="stateHidden|adjustPan"
Saya memiliki beberapa implementasi yang dijelaskan di sini, tetapi sekarang saya telah menambahkan ke dalam AndroidManifest.xml
untuk Activity
properti saya :
android:windowSoftInputMode="stateAlwaysHidden"
fragments
." stateAlwaysHidden " Soft keyboard selalu tersembunyi saat jendela utama aktivitas memiliki fokus input.
Jika Anda memiliki pandangan lain tentang aktivitas Anda seperti ListView
, Anda juga dapat melakukan:
ListView.requestFocus();
di onResume () Anda untuk mengambil fokus dari editText
.
Saya tahu pertanyaan ini telah dijawab tetapi hanya memberikan solusi alternatif yang berhasil untuk saya :)
https://stackoverflow.com/a/11627976/5217837 Ini hampir benar:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
Tetapi harus SOFT_INPUT_STATE_HIDDEN daripada SOFT_INPUT_STATE_ALWAYS_VISIBLE
Gunakan ini di kode Aktivitas Anda:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
Saya mengalami masalah yang sama, bahkan saat berpindah tab, keyboard muncul secara otomatis dan tetap aktif, dengan Android 3.2.1 di Tablet. Gunakan metode berikut:
public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
searchEditText.setCursorVisible(isFocused);
searchEditText.setFocusable(isFocused);
searchEditText.setFocusableInTouchMode(isFocused);
if (isFocused) {
searchEditText.requestFocus();
} else {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
}
}
Di onCreate () dan di onPause () aktivitas untuk setiap EditText:
setEditTextFocus (myEditText, false);
Untuk setiap EditText, sebuah OnTouchListener:
myEditText.setOnTouchListener(new EditText.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
setEditTextFocus(myEditText, true);
return false;
}
});
Untuk masing-masing EditText
di OnEditorActionListener
:
myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
.......
setEditTextFocus(myEditText, false);
return false;
}
});
Dan untuk masing-masing EditText
di layout xml
:
android:imeOptions="actionDone"
android:inputType="numberDecimal|numberSigned" // Or something else
Mungkin ada lebih banyak kemungkinan pengoptimalan kode.
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);
Saya telah menemukan solusi sederhana ini yang berhasil untuk saya Tetapkan atribut ini di tata letak induk Anda:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
Dan sekarang, saat aktivitas dimulai, tata letak utama ini akan mendapatkan fokus secara default.
Selain itu, kita bisa menghapus fokus dari tampilan turunan saat waktu proses dengan memberikan fokus ke layout utama lagi, seperti ini:
findViewById(R.id.mainLayout).requestFocus();
Semoga berhasil untuk Anda.
ini adalah solusi yang saya gunakan, bukan solusi terbaik tetapi bekerja dengan baik untuk saya
editComment.setFocusableInTouchMode(false);
editComment.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event)
{
// TODO Auto-generated method stub
editComment.setFocusableInTouchMode(true);
editComment.requestFocus() ;
return false;
}});
Menariknya, dokumentasi ini https://developer.android.com/training/keyboard-input/visibility.html menyatakan bahwa ketika aktivitas dimulai dan fokus diberikan ke bidang teks, keyboard lunak tidak ditampilkan (dan kemudian berlanjut ke menunjukkan kepada Anda bagaimana agar keyboard ditampilkan jika Anda ingin dengan beberapa kode).
Di Samsung Galaxy S5 saya, beginilah cara kerja aplikasi saya (tanpa entri manifes atau kode tertentu) - tanpa keyboard lunak. Namun pada AVD Lollipop, keyboard lembut ditampilkan - bertentangan dengan dokumen yang diberikan di atas.
Jika Anda mendapatkan perilaku ini saat menguji dalam AVD, Anda mungkin ingin menguji pada perangkat nyata untuk melihat apa yang terjadi.
Ini memiliki beberapa jawaban bagus di posting berikut: Hentikan EditText dari mendapatkan fokus saat memulai Aktivitas . Yang biasa saya gunakan adalah kode berikut oleh Morgan :
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:nextFocusUp="@id/autotext"
android:nextFocusLeft="@id/autotext"/>
CATATAN: Item dummy harus DITEMPATKAN SEBELUM elemen yang dapat difokuskan.
Dan saya pikir itu harus bekerja dengan sempurna bahkan dengan ScrollView dan tidak memiliki masalah dengan aksesibilitas baik untuk ini.
Ini terjadi saat EditText Anda secara otomatis mendapatkan Fokus seperti saat Anda memulai aktivitas. Jadi satu cara mudah dan stabil untuk memperbaikinya, cukup dengan mengatur fokus awal ke tampilan lain, seperti Tombol dll.
Anda dapat melakukan ini dalam XML tata letak Anda, tidak perlu kode ..
Jawaban yang diterima tidak berfungsi untuk saya, itu sebabnya berikan jawaban solusi yang berfungsi, semoga bermanfaat!
EditText edt = (EditText) findViewById(R.id.edt);
edt.requestFocus();
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
Sekarang keyboard terbuka, nikmati :)
android: windowSoftInputMode = "stateHidden | adjustResize"
Bekerja dengan baik
android:focusableInTouchMode="true"
Tambahkan baris di atas ke xml dari EditText
atau TextInputLayout
yang memiliki fokus dan menyebabkansoftInputKeyboard
pop up.
Ini memecahkan masalah bagi kami dan sekarang keyboard tidak muncul
search_edit_text = (EditText) findViewById (R.id.search_edit_text);
search_edit_text.requestFocus();
search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
Ini berfungsi untuk saya, fragmen guys mungkin memiliki beberapa sintaks yang berbeda. INI BEKERJA UNTUK AKTIVITAS
Jika tampilan Anda memiliki EditText dan Listview, maka Keyboard akan terbuka secara default. Untuk menyembunyikan keyboard agar tidak muncul secara default lakukan hal berikut
this.listView.requestFocus();
Pastikan Anda meminta fokus pada tampilan daftar setelah mendapatkan tampilan untuk editText.
Misalnya
this.listView = (ListView) this.findViewById(R.id.list);
this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch);
this.listView.requestFocus();
Jika Anda melakukannya, maka editText akan mendapatkan fokus dan keyboard akan muncul.