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?


93
dalam manifes Anda<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


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.


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.


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">

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 :)


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"
      >

11

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


9

Tambahkan saja di AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>

8

Cukup tambahkan ini di file manifest.xml Anda

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

Anda semua selesai.


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! ;-)


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();
}

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">

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)
}

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


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);

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);
}
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.