Cara menyembunyikan Soft Keyboard saat aktivitas dimulai

151

Saya memiliki Edittext android:windowSoftInputMode="stateVisible"di Manifest. Sekarang keyboard akan ditampilkan ketika saya memulai aktivitas. Bagaimana cara menyembunyikannya? Saya tidak bisa menggunakan android:windowSoftInputMode="stateHiddenkarena ketika keyboard terlihat kemudian meminimalkan aplikasi dan melanjutkannya keyboard itu harus terlihat. Saya mencoba

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

tapi itu tidak berhasil.

Aju
sumber

Jawaban:

1

Jika Anda tidak ingin menggunakan xml, buatlah Ekstensi Kotlin untuk menyembunyikan keyboard

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

Alternatif berdasarkan use case:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

Cara menampilkan keyboard lunak

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Metode yang lebih sederhana ketika secara bersamaan meminta fokus pada edittext

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Penyederhanaan bonus:

Hapus persyaratan untuk selalu menggunakan getSystemService: Perpustakaan Splitties

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
Gibolt
sumber
361

Dalam AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

atau coba

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

Silakan periksa ini juga

Neenu
sumber
3
Terima kasih untuk android:windowSoftInputMode="stateHidden"
Shylendra Madda
2
Sebenarnya ada juga jawaban bagus untuk mencegah pemfokusan pada teks edit stackoverflow.com/questions/4668210/…
Boris Treukhov
204

Gunakan fungsi berikut untuk menampilkan / menyembunyikan keyboard:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}
Sherif elKhatib
sumber
4
Konteks.INPUT_METHOD_SERVICE bagi mereka yang berada dalam fragmen atau tidak dalam kegiatan utama dll.
Oliver Dixon
7
Anda bisa mencoba ini. Ini berfungsi jika Anda memanggilnya dari aktivitas. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) ‌;
Sinan Dizdarević
Bagaimana jika kita perlu menyebutnya dari dalam pendengar? SukaonFocusChange()
André Yuhai
44

Tambahkan saja dua atribut ke tampilan induk dari editText.

android:focusable="true"
android:focusableInTouchMode="true"
mani
sumber
36

Masukkan ini dalam manifes di dalam tag Aktivitas

  android:windowSoftInputMode="stateHidden"  
Saneesh
sumber
atau android: windowSoftInputMode = "stateUnchanged" - Ini berfungsi seperti: jangan perlihatkan jika belum ditampilkan, tetapi jika terbuka saat memasuki aktivitas, biarkan terbuka).
Sujeet Kumar Gupta
ya kamu benar. tetapi bagaimana jika orientasinya berubah?
Saneesh
26

Coba ini:

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

Lihat yang ini untuk lebih jelasnya.

Adnan
sumber
14

Untuk menyembunyikan papan tombol saat Aktivitas baru dimulai atau onCreate(), onStart()dll. Anda dapat menggunakan kode di bawah ini:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Rana Pratap Singh
sumber
10

Menggunakan AndroidManifest.xml

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

Menggunakan Java

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

menggunakan keyboard solusi di atas sembunyikan tetapi edit dari mengambil fokus saat aktivitas dibuat, tetapi ambil ketika Anda menyentuhnya menggunakan:

tambahkan EditText Anda

<EditText
android:focusable="false" />

juga tambahkan pendengar EditText Anda

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});
Atif Amin
sumber
7

Tambahkan teks berikut ke file xml Anda.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>
Hits
sumber
6

Saya harap ini akan berhasil, saya mencoba banyak metode tetapi ini berhasil untuk saya fragments. cukup letakkan baris ini di onCreateview / init.

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Mubashar
sumber
5

Untuk menyembunyikan papan tombol pada saat mulai Aktivitas baru atau metode onCreate (), onStart () dll. Gunakan kode di bawah ini:

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

Untuk menyembunyikan papan tombol pada saat tombol diklik dalam aktivitas:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
Adam
sumber
5

Gunakan SOFT_INPUT_STATE_ALWAYS_HIDDEN sebagai ganti SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Brinda Rathod
sumber
5

tambahkan aktivitas Anda di manifasts properti ini

android:windowSoftInputMode="stateHidden" 
Yousef
sumber
4

Letakkan kode ini file java Anda dan berikan argumen untuk objek pada edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
Najib Ahmed Puthawala
sumber
4

Anda dapat mengatur konfigurasi di AndroidManifest.xml

Contoh:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>
Long Nguyen
sumber
4

Gunakan kode berikut untuk Sembunyikan papan ketik pertama kali saat Anda memulai Kegiatan

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Geeta Gupta
sumber
3

Coba yang ini juga

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});
ritesh4326
sumber
3

Jawaban di atas juga benar. Saya hanya ingin memberikan pengarahan bahwa ada dua cara untuk menyembunyikan keyboard saat memulai aktivitas, dari manifest.xml. misalnya:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Cara di atas selalu menyembunyikannya saat memasuki aktivitas.

atau

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Yang ini mengatakan jangan mengubahnya (mis. Jangan perlihatkan jika belum ditampilkan, tetapi jika terbuka saat memasuki aktivitas, biarkan terbuka).
Sujeet Kumar Gupta
sumber
2

Inilah yang saya lakukan:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });
mangu23
sumber
2

Jika aplikasi Anda menargetkan Android API Level 21 atau lebih dari ada metode default yang tersedia.

editTextObj.setShowSoftInputOnFocus(false);

Pastikan Anda telah menetapkan kode di bawah ini dalam EditTexttag XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />
Harpreet
sumber
1

Coba ini.

Pertama di xml Anda yang dapat dicari, kolom-kolom (nama dan petunjuk, dll) dimasukkan @stringdan bukan string literal.

Kemudian metode onCreateOptionsMenu, itu harus memiliki ComponentNameobjek dengan nama paket Anda dan nama kelas lengkap Anda (dengan nama paket) - Dalam kasus aktivitas yang memiliki SearchViewkomponen sama dengan acara yang digunakan hasil pencariangetComponentName() , seperti yang dikatakan pengembang android google.

Saya mencoba banyak solusi dan setelah banyak bekerja solusi ini bekerja untuk saya.

toktokwho
sumber
1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me
pengguna3024334
sumber
1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

ini akan bekerja


sumber
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
rollstuhlfahrer