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.

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)

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


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

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"

36

Masukkan ini dalam manifes di dalam tag Aktivitas

  android:windowSoftInputMode="stateHidden"  

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.


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

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

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>

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

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

5

Gunakan SOFT_INPUT_STATE_ALWAYS_HIDDEN sebagai ganti SOFT_INPUT_STATE_HIDDEN

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

5

tambahkan aktivitas Anda di manifasts properti ini

android:windowSoftInputMode="stateHidden" 

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

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

4

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

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

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

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

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

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

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.


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

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

ini akan bekerja


Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
rollstuhlfahrer
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.