Etkinlik başladığında Soft Keyboard nasıl gizlenir


151

android:windowSoftInputMode="stateVisible"Manifest'te bir Edittext'im var . Şimdi aktiviteyi başlattığımda klavye gösterilecek. Nasıl saklanır? Kullanamıyorum android:windowSoftInputMode="stateHiddençünkü klavye görünür olduğunda uygulamayı simge durumuna küçültün ve devam ettirin, klavye görünür olmalıdır. İle denedim

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

Ama çalışmadı.

Yanıtlar:


1

Xml kullanmak istemiyorsanız, klavyeyi gizlemek için bir Kotlin Uzantısı yapın

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

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

Kullanım durumuna göre alternatifler:

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

Yazılım klavyesi nasıl gösterilir?

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

Aynı anda bir düzenleme metnine odaklanma isteğinde daha basit yöntem

myEdittext.focus()

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

Bonus basitleştirme:

Her zaman kullanmak için gereksinimi kaldırın getSystemService: Splitties Kütüphanesi

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

361

İçinde AndroidManifest.xml:

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

veya Dene

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

Lütfen bunu da kontrol edin


3
Teşekkürler android:windowSoftInputMode="stateHidden"
Shylendra Madda

2
Aslında düzenleme metnine odaklanmanın önlenmesi konusunda da büyük bir cevap var stackoverflow.com/questions/4668210/…
Boris Treukhov

204

Klavyeyi göstermek / gizlemek için aşağıdaki işlevleri kullanın:

/**
 * 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
Context.INPUT_METHOD_SERVICE, fragman içinde olan veya ana faaliyette olmayanlar vb. İçin
Oliver Dixon

7
Bunu deneyebilirsiniz. Etkinlikten çağırırsanız çalışır. . GetWindow () setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Sinan Dizdarević

Bunu bir dinleyiciden çağırmamız gerekirse ne olur? BeğenonFocusChange()
André Yuhai

44

EditText öğesinin üst görünümüne iki özellik eklemeniz yeterlidir.

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

36

Bunu, Etkinlik etiketinin içindeki manifest'e koyun

  android:windowSoftInputMode="stateHidden"  

veya android: windowSoftInputMode = "stateUnchanged" - Bu şu şekilde çalışır: zaten gösterilmiyorsa gösterme, ancak etkinliğe girerken açıksa, açık bırakın).
Sujeet Kumar Gupta

evet haklısın. ama yön değiştirilirse ne olur?
Saneesh

26

Bunu dene:

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

Bak bu daha fazla ayrıntı için biri.


14

Yeni Aktivite başlangıç veya anındaki SoftKeyboard gizlemek için onCreate(), onStart()aşağıdaki kodu kullanabilirsiniz vb:

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

10

AndroidManifest.xml kullanma

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

Java Kullanımı

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

yukarıdaki çözüm klavyesini kullanarak, ancak aktivite oluşturulduğunda metnin odaklanmasını engelleyebilir, ancak bunları kullanarak dokunduğunuzda kapabilirsiniz:

EditText'inize ekleyin

<EditText
android:focusable="false" />

EditText'inizin dinleyicisini de ekleyin

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

7

Aşağıdaki metni xml dosyanıza ekleyin.

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

Umarım bu işe yarar, birçok yöntem denedim ama bu benim için çalıştı fragments. bu satırı onCreateview / init içine koymanız yeterli.

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

5

Yeni Etkinlik start veya onCreate (), onStart () yöntemi vb. Sırasında yazılım klavyesini gizlemek için aşağıdaki kodu kullanın:

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

Etkinlikte Düğme tıklatıldığında yazılım tuş takımını gizlemek için:

View view = this.getCurrentFocus();

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

5

SOFT_INPUT_STATE_HIDDEN yerine SOFT_INPUT_STATE_ALWAYS_HIDDEN kullanın

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

5

etkinliğinize bu özelliği gösterir

android:windowSoftInputMode="stateHidden" 

4

Bu kodu java dosyanıza koyun ve nesne için bağımsız değişkeni edittext'e iletin,

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

4

AndroidManifest.xml'de config ayarlayabilirsiniz

Misal:

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

4

Etkinliği başlattığınızda yazılım tuş takımını ilk kez gizlemek için aşağıdaki kodu kullanın

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

3

Bunu da deneyin

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

Yukarıdaki cevaplar da doğrudur. Sadece aktiviteyi başlatırken klavyeyi gizlemenin iki yolu olduğunu bildirmek istiyorum, manifest.xml dosyasından. Örneğin:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Yukarıdaki yol, etkinliğe girerken her zaman gizler.

veya

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Bu, değiştirmediğini söylüyor (örneğin, daha önce gösterilmemişse gösterme, ancak etkinliğe girerken açıksa, açık bırakın).

2

Ben de öyle yaptım:

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

Uygulamanız Android API Seviye 21 veya daha fazlasını hedefliyorsa , kullanılabilir varsayılan bir yöntem vardır.

editTextObj.setShowSoftInputOnFocus(false);

EditTextXML kodunda aşağıdaki kodu ayarladığınızdan emin olun .

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

1

Bunu dene.

Öncelikle aranabilir xml'nizde @stringgerçek dizeleri değil alanları (ad ve ipucu vb.) Koyun.

Daha sonra yöntem onCreateOptionsMenu, ComponentNamepaket adınız ve tamamlanmış sınıf adınızla (paket adıyla) bir nesneye sahip olmalıdır - SearchViewBileşeni içeren etkinliğin getComponentName(), google android geliştiricisinin dediği gibi arama arama sonuçlarının kullanımı ile aynı olması durumunda.

Çok fazla çözüm denedim ve çok çalıştıktan sonra bu çözüm benim için çalışıyor.


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

işe yarayacak


Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
rollstuhlfahrer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.