Cegah keyboard agar tidak ditampilkan di awal aktivitas

265

Saya memiliki aktivitas dengan Edit Textinput. Saat aktivitas diinisialisasi, keyboard Android ditampilkan. Bagaimana keyboard tetap tersembunyi sampai pengguna memfokuskan input?

Fcoder
sumber
93
dalam manifes Anda<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger
1
kemungkinan duplikat keyboard layar Android otomatis muncul
Caleb
1
Bagaimana cara menggunakannya bersama android:windowSoftInputMode="adjustPan"?
János
4
@ János android: windowSoftInputMode = "AdjustPan | stateHidden"
Alexey Strakh
jawaban dalam komentar ini, adalah jawaban yang saya cari: stackoverflow.com/a/23605510/6942602
korchix

Jawaban:

436

Saya pikir yang berikut ini mungkin berhasil

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

Saya sudah menggunakannya untuk hal semacam ini sebelumnya.

Lucas
sumber
Apakah ada cara untuk mengaturnya menjadi keypad khusus digit? yaitu keyboard 12Key?
Mohamed Khamis
@MohamedKhamis input.setRawInputType (Configuration.KEYBOARD_12KEY);
blockwala
1
Ya itu masih berfungsi. @SagarNayak mengapa Anda ingin menyembunyikan keyboard EditText? :) Ini untuk menyembunyikan keyboard saat aktivitas dimulai yang berisiEditText
Martynas
@Devealte 7 tahun kemudian dan itu berhasil untuk saya, apakah Anda meletakkannya di onCreate?
Dymas
@ Demas Ya, dan saya baru saja memperbaikinya beberapa bulan yang lalu :)
Devealte
180

Coba ini juga -

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

Jika tidak, nyatakan dalam aktivitas file manifes Anda -

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

Jika Anda telah menggunakan android:windowSoftInputModenilai seperti adjustResizeatau adjustPan, Anda dapat menggabungkan dua nilai seperti:

<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

Ini akan menyembunyikan keyboard bila perlu, tetapi geser tampilan aktivitas jika keyboard harus ditampilkan.

Praveenkumar
sumber
3
terima kasih telah menunjukkan keduanya dalam kode, dan dalam xml! Memang, ini adalah jawaban yang paling benar! Terutama karena mungkin 3 menit yang Anda habiskan untuk menulis kedua metode yang membuat Anda tidak pertama ;-)
eric
34

Sembunyikan untuk semua aktivitas menggunakan tema

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

atur temanya

<application android:theme="@style/MyTheme">
dira
sumber
seperti pendekatan global ini.
Rm558
1
Ini berhasil karena saya menggunakan tema yang berbeda di berbagai tempat
nmxprime
22

Tambahkan dua properti ini ke tata letak induk Anda (mis: Tata Letak Linear, Tata Letak Relatif)

android:focusable="false"
android:focusableInTouchMode="false" 

Ini akan melakukan triknya :)

Raja Misa
sumber
2
Ini tidak berhasil untuk saya, namun mengaturnya agar trueberfungsi, sesuai jawaban Jack T. Apakah ada perubahan perilaku di versi terbaru?
Protean
Selain jawaban saya, Anda perlu memeriksa properti lain juga yang Anda miliki dalam manifes dan untuk mengedit teks.
Raja Misa
Saya hanya memiliki properti paling mendasar di dalamnya. Saya tidak mengerti mengapa pengaturan ini falseharus bekerja, karena idenya adalah untuk mendapatkan fokus dari kotak EditText.
Protean
Mungkin ini digunakan untuk menjauhkan fokus dari kotak EditText dengan menjauhkannya dari tata letak induk? Tapi sekarang tidak lagi.
Protean
13

Cobalah untuk mendeklarasikannya dalam file menifest

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >
Androidify
sumber
11

Jika Anda menggunakan API level 21, Anda dapat menggunakan editText.setShowSoftInputOnFocus (false);

SaraVF
sumber
9

Tambahkan saja di AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>
Dayanand Waghmare
sumber
8

Cukup tambahkan ini di file manifest.xml Anda

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

Anda semua selesai.

Androido
sumber
7

Anda juga dapat menulis baris kode ini di tata letak induk langsung dari file tata letak .xml di mana Anda memiliki "masalah":

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

Sebagai contoh:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


EDIT:

Contoh jika EditText terkandung dalam tata letak lain:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

Kuncinya adalah memastikan bahwa EditText tidak dapat langsung fokus.
Sampai jumpa! ;-)

Jack T
sumber
6

Solusi terbaik untuk saya, tempel kelas Anda

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}
Efe ÖZYER
sumber
3

Berfungsi untuk menyembunyikan keyboard.

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

Sembunyikan keyboard di file AndroidManifext.xml.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">
Philip BH
sumber
3

Untuk memperluas jawaban yang diterima oleh @Lucas:

Sebut ini dari aktivitas Anda di salah satu acara siklus kehidupan awal:

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

Contoh Kotlin:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
Trevor. Tongkat
sumber
2

Anda dapat mencoba set atribut unik ini untuk setiap elemen

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

Keyboard tidak akan ditampilkan saat elemen fokus

Somwang Souksavatd
sumber
Meskipun ini mungkin menjawab pertanyaan penulis, tidak ada beberapa kata yang menjelaskan dan / atau tautan ke dokumentasi. Cuplikan kode mentah tidak sangat membantu tanpa frasa di sekitarnya. Anda juga dapat menemukan cara menulis jawaban yang baik sangat membantu. Harap edit jawaban Anda - Dari Ulasan
Nick
1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
Yuliia Ashomok
sumber
0

cukup tambahkan ini di Aktivitas Anda:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
haythem souissi
sumber