Keyboard Android di layar otomatis muncul

140

Salah satu aplikasi saya memiliki "layar pembuka" (pada dasarnya sebuah menu) yang EditTextdiikuti oleh beberapa Buttons. Masalahnya adalah beberapa pengguna saya melaporkan bahwa ketika mereka membuka aplikasi itu secara otomatis muncul keyboard di layar tanpa mereka menyentuh EditText. Sejauh yang saya tahu, semua pengguna ini menggunakan Pahlawan HTC .

Apakah ini bug dalam 1,5? Apakah ada yang bisa saya lakukan?

Jeremy Logan
sumber
1
Jika itu bug, itu mungkin ada di Sprint Hero secara khusus. Sprint memiliki versi Android buggy pada Heros yang mereka jual dan mereka tampaknya tidak terburu-buru mendorong keluar perbaikan bug untuk itu. Ada banyak perbedaan perilaku antara Sprint Heros dan semua perangkat Android lainnya. Sejauh yang saya tahu versi lain dari Pahlawan, seperti yang ada di Eropa tidak memiliki masalah ini.
Mark B
sayangnya Pahlawan di sini di Eropa memiliki masalah besar, mereka berubah tergantung pada jumlah build tetapi kami telah menemukan 3 - 4 bug utama.
Donal Rafferty

Jawaban:

279

Anda dapat menggunakan baris kode berikut dalam metode onCreate aktivitas untuk memastikan keyboard hanya muncul ketika pengguna mengklik ke dalam EditText

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
Donal Rafferty
sumber
Ini tidak berfungsi untuk saya (2.2 MyTouch 3G). Dalam metode onCreate () saya, saya memanggil setSoftInputMode (). EditText masih menyebabkan keyboard untuk menampilkan :(
Nate
Ini berhasil untuk saya. Saya menjalankan Android 2.3.4, dan mengembangkan menggunakan <uses-sdk android: minSdkVersion = "3" />
Sandy
78
Atau gunakan android:windowSoftInputMode="stateHidden"seperti di sini
Swato
Jadi yang membingungkan saya adalah saya memiliki aktivitas masuk yang sepertinya menyembunyikan keyboard dengan baik. Saya sudah membuat aktivitas register sekarang juga, tetapi keyboardnya muncul secara default. Jadi bagaimana cara masuk yang menghindari ini? Saya tidak dapat menemukan setSoftInputMode di aktivitas login, atau atribut windowSoftInputMode di activity.xml.
Chucky
tidak selalu berfungsi: pada beberapa perangkat, SOFT_INPUT_STATE_ALWAYS_HIDDEN menyebabkan kesalahan karena teks edit yang bukan yang terakhir aktif dalam aktivitas tidak dapat menyebabkan keyboard lunak muncul. menggunakan "android: windowSoftInputMode =" stateHidden "" dalam manifes juga memiliki efek yang sama. dokumen pengembang menyatakan bahwa keyboard lunak tidak akan muncul secara otomatis kecuali terpaksa, tetapi itu sama sekali salah.
85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

Ini berfungsi untuk Android 3.0, 3.1, 3.2, 4.0 - Editor Digunakan untuk Mengkompilasi (Eclipse 3.7)

Tempatkan 'windowSoftInputMode = "stateHidden"' dalam file XML manifes aplikasi Anda untuk setiap aktivitas yang Anda inginkan agar keyboard perangkat lunak tetap tersembunyi. Ini berarti keyboard tidak akan muncul secara otomatis dan pengguna harus 'mengklik' pada bidang teks untuk memunculkannya. Saya mencari hampir satu jam untuk sesuatu yang berhasil jadi saya pikir saya akan berbagi.

mourngrym1969
sumber
Solusi terbaik yang saya temukan sejauh ini. Memfokuskan bidang tanpa membuka keyboard. Bekerja pada Nexus S dengan 4.1.2
alexismorin
1
android: windowSoftInputMode = "stateHidden | adjustNothing" juga membantu jika Anda menggunakan fragmen dan Anda tidak ingin keyboard mengubah tata letak
whyoz
6

Tambahkan ini di AndroidManifest.xml Anda :

android:windowSoftInputMode="stateHidden|adjustResize"

Ini bekerja dengan sempurna. :)

Arun
sumber
1
Terima kasih atas jawabannya. Maaf, bagaimana saya bisa memanggil keyboard sekarang? Itu tidak akan muncul saat panggilan requestFocus().
Takesi Tokugawa YD
6

Kode ini akan berfungsi pada semua versi android:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

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

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }
Satheeshkumar Somu
sumber
Ditambah 1 untuk mengetahui mana yang muncul dan mana yang tidak
Demon App Programmer
4

Tambahkan ini dalam tata letak induk XML.

android:focusable="true" 
android:focusableInTouchMode="true"

Itu memastikan fokus tidak pada editText ketika Kegiatan dimulai.

Ben
sumber
3

Anda bisa menggunakan ini di metode aktivitas onCreate ()

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

atau rekatkan kode ini di tag Aktivitas di AndroidManifest.xml

android:windowSoftInputMode="stateVisible"
sommer
sumber
2
Saya pikir maksud Anda "stateHidden" daripada "stateVisible".
stevehs17
2

Anda dapat menambahkan satu baris kode di Android Mainfest.xml di bawah tag aktivitas

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

ini dapat membantu Anda.

Mohanraj SK
sumber
1

Dalam versi Android itu, ketika tampilan meningkat, fokus akan ditetapkan ke kontrol yang dapat difokuskan pertama secara default - dan jika tidak ada keyboard fisik, keyboard di layar akan muncul.

Untuk memperbaikinya, atur fokus secara eksplisit di tempat lain. Jika fokus diatur ke selain EditText, keyboard di layar tidak akan muncul.

Sudahkah Anda mencoba menguji ini dengan menjalankan Android 1.5 di emulator?

dmazzoni
sumber
Saya sudah mencobanya di emulator (dan hanya melakukannya lagi untuk memastikan saya tidak gila). Kerjanya "benar" (artinya tidak ada keyboard yang muncul). Juga, ketika saya awalnya menulis ini G1 saya berjalan 1,5 dan tidak bertindak seperti ini (ketika keyboard "tersembunyi").
Jeremy Logan
Saya masih yakin itu ada hubungannya dengan fokus awal. Mungkin itu adalah sesuatu yang spesifik untuk Pahlawan HTC, tetapi saya akan mencoba mengatur fokus secara eksplisit untuk sesuatu yang lain dan melihat apakah itu memperbaikinya untuk pengguna Anda.
Mark B
Apakah ada cara untuk memberikan fokus "tidak ada"?
Jeremy Logan
1
Ini tidak berfungsi untuk saya (2.2 MyTouch 3G). Dalam metode onCreate () saya, saya secara eksplisit memanggil requestFocus () pada Button, yang merupakan widget kedua dalam tampilan. EditText masih menyebabkan keyboard untuk menampilkan :(
Nate
1

Anda dapat melakukannya secara terprogram seperti

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

atau diatur android:windowSoftInputMode="stateHidden"di <activity tagdalamAndroidManifest.xml

Xar-e-ahmer Khan
sumber
1

Masukkan ini di tempat impor berada di atas:

import android.view.WindowManager;

Tambahkan kode ini pada bagian OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
Mike Zriel
sumber
0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Ini untuk Android.xamarin dan FindFocus () - ini mencari tampilan dalam hierarki yang berakar pada tampilan ini yang saat ini memiliki fokus, seperti yang saya miliki _enterPin.RequestFocus () sebelum kode di atas sehingga menunjukkan keyboard untuk _enterPin EditText *

Ruchira
sumber