Bagaimana cara menghapus fokus otomatis / sembulan keyboard dari suatu bidang saat layar muncul?


105

Saya memiliki layar di mana bidang pertama adalah EditText, dan mendapatkan fokus saat startup, juga memunculkan jenis input numerik, yang sangat mengganggu

Bagaimana saya bisa memastikan bahwa ketika aktivitas dimulai, fokus tidak diperoleh, dan / atau panel input tidak dimunculkan?

Jawaban:


157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

atau

setel properti aktivitas dalam file manifes seperti di bawah ini di tag aplikasi

android:windowSoftInputMode="stateHidden"

Menyetel android: windowSoftInputMode di file AndroidManifest.xml bisa di-OR dengan nilai lain. Mode biasanya menyiratkan nilai tunggal tetapi dalam kasus ini, nilainya adalah kumpulan tanda. Deskripsi nilai:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir

145

buka file manifes aplikasi Anda, dan tulis baris ini untuk aktivitas yang ingin Anda nonaktifkan pop-up keyboard otomatisnya.

android:windowSoftInputMode="stateHidden"

Tidak berhasil untuk saya. Saya menaruhnya di activity_main.xml. Ini bekerja dengan sempurna ketika saya memasukkannya ke onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

Agar secara terprogram tidak ada keyboard yang ditampilkan, tetapi widget default masih menerima panggilan fokus:

getWindow().setSoftInputMode(WindowManager.
                             LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

di onResume()


11
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

panggil metode di atas di dalam onCreate () . Ini mencegah softKeyboard untuk ditampilkan kecuali pengguna memilih EditText bytapping or clicking.

atau cukup tambahkan android:windowSoftInputMode="stateHidden"tag Aktivitas diManifest.xml


10

Ini biasanya berantakan. Hal pertama yang saya coba adalah mencoba mencuri fokus dengan view lain lewat. Anda juga harus memiliki focusable dan focusableInTouchMode.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

Ini bekerja. Saya merasa ini adalah pendekatan yang lebih bersih tetapi juga tergantung bagaimana kondisi Anda. Saya menerima yang ini.
JaydeepW

5

Miliki pandangan lain untuk mengambil fokus. Secara default, Tampilan pertama yang dapat difokuskan akan mendapatkan fokus saat tata letak diluaskan. Anda dapat meminta fokus pada View yang berbeda melalui XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Ini berfungsi untuk semua View.

Jika Anda ingin melakukannya secara terprogram, Anda dapat menggunakan view.requestFocus().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
Selamat datang di StackOverflow! Ini tidak seperti forum lain, jika Anda ingin mengubah jawaban Anda, klik saja edittautannya dan lakukan perubahan. Dan coba format kode Anda dengan memilih kode Anda dan menggunakan tombol Contoh Kode {}atau menekan Ctrl+K.
Peter Lang

0

Menambahkan android:windowSoftInputMode="stateHidden"ke Aktivitas Anda dalam manifes hanya menyembunyikan keyboard saat Anda meluncurkan aktivitas, atau seperti yang dikatakan Google

Saat pengguna dengan tegas menavigasi ke depan ke aktivitas, bukan kembali ke aktivitas itu karena keluar dari aktivitas lain

Untuk menyembunyikan keyboard juga saat pengguna menekan tombol kembali dan kembali ke aktivitas Anda dari beberapa aktivitas lain, gunakan android:windowSoftInputMode="stateAlwaysHidden"


-1

belum mencoba ini atau saya berada di dekat komputer pemrograman saya, tetapi saya curiga mengirim fokus secara terprogram ke tampilan orang tua atau sesuatu yang bersifat semacam itu dapat melakukan trik - itu lebih mungkin solusi daripada solusi, tetapi sekali lagi tidak dapat mengujinya saja Sebuah pemikiran


1
Saya sudah mencobanya tetapi tidak berhasil. Saya memanggil .requestFocus();sebuah tombol, dan masih popup keyboard.
Pentium10

pendapat dapat ditambahkan sebagai komentar
Alberto M
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.