Etkinlik başlangıcında klavyenin görüntülenmesini engelleyin


265

Edit TextGirdi ile bir faaliyetim var . Etkinlik başlatıldığında Android klavye gösterilir. Kullanıcı girişi odaklayana kadar klavye nasıl gizli kalabilir?


93
Manifest'te<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


1
Birlikte nasıl kullanılır android:windowSoftInputMode="adjustPan"?
János

4
@ János android: windowSoftInputMode = "adjustPan | stateHidden"
Alexey Strakh

Yanıtlar:


436

Bence aşağıdakiler işe yarayabilir

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

Daha önce bu tür şeyler için kullandım.


Yalnızca rakam tuş takımı olarak ayarlamanın bir yolu var mı? yani 12 Tuşlu klavye?
Mohamed Khamis

@MohamedKhamis input.setRawInputType (Yapılandırma.KEYBOARD_12KEY);
blockwala

1
Evet hala çalışıyor. @SagarNayak neden klavyeyi gizlemek istersiniz EditText? :) Bu, aşağıdakileri içeren etkinlik başladığında klavyeyi gizlemek içindirEditText
Martynas

7 yıl sonra @Devealte ve benim için çalıştı, onCreate'a yerleştirdin mi?
Dymas

@Dymas Evet, ve ben sadece birkaç ay önce düzelttim :)
Devealte

180

Bunu da deneyin -

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

Aksi takdirde, bildirim dosyanızın etkinliğinde beyan edin -

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

Zaten veya android:windowSoftInputModegibi bir değer için kullandıysanız , aşağıdaki gibi iki değeri birleştirebilirsiniz:adjustResizeadjustPan

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

Bu, uygun olduğunda klavyeyi gizler, ancak klavyenin gösterilmesi gerektiğinde etkinlik görünümünü kaydırır.


3
hem kodda hem de xml'de gösterdiğiniz için teşekkürler! Gerçekten, bu en doğru cevap! Özellikle de 3 dakika önce sizi ilk yapmayan her iki yöntemi yazmak için harcadığınız için ;-)
eric

34

Temayı kullanarak tüm etkinlikler için gizle

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

temayı ayarla

<application android:theme="@style/MyTheme">

bu küresel yaklaşım gibi.
Rm558

1
Bu, çeşitli yerlerde farklı temalar kullanırken işe yaradı
nmxprime

22

Bu iki özelliği üst mizanpajınıza ekleyin (ör. Doğrusal Düzen, Göreli Düzen)

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

Hile yapacak :)


2
Bu benim için işe yaramıyor, ancak trueJack T'nin cevabına göre onları işe koyuyor. Son sürümlerde davranış değişikliği oldu mu?
Protean

Cevabımın yanı sıra, manifestoda bulunan ve metin düzenleme için sahip olduğunuz diğer özellikleri de kontrol etmeniz gerekiyor.
Kitlelerin Kralı

İçlerinde en temel özelliklere sahibim. falseFikir EditText kutularından uzak tutmak için neden olsa bu ayar çalışması gerekir, anlamıyorum.
Protean

Belki odağı üst mizanpajdan uzaklaştırarak EditText kutularından uzaklaştırırdı? Ama artık değil, öyle görünüyor.
Protean

13

Menifest dosyasında bildirmeye çalışın

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

11

API düzey 21'i kullanıyorsanız editText.setShowSoftInputOnFocus (false);


9

Android'de ekleManifest.xml

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

8

Bunu manifest.xml dosyanıza eklemeniz yeterlidir

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

Hepiniz bittiniz.


7

Bu kod satırlarını, içinde "sorun" bulunan .xml mizanpaj dosyasının doğrudan üst mizanpajına da yazabilirsiniz :

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

Örneğin:

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


DÜZENLE :

EditText başka bir mizanpajda bulunuyorsa örnek:

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

Anahtar EditText doğrudan odaklanabilir olmadığından emin olmaktır.
Hoşçakal! ;-)


6

Benim için en iyi çözüm, sınıfını yapıştır

@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

Klavyeyi gizleme işlevi.

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

AndroidManifext.xml dosyasında klavyeyi gizle.

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

3

@Lucas'ın kabul ettiği cevabı genişletmek için:

Bunu erken yaşam döngüsü olaylarından birinde yaptığınız aktiviteden çağırın:

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

Kotlin Örneği:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

Her bir öğe için bu küme benzersiz özelliğini deneyebilirsiniz

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

Öğe odaktayken klavye gösterilmeyecek


Bu, yazarların sorusunu cevaplasa da, açıklayıcı kelimeler ve / veya belgelere bağlantılar içermez. Ham kod parçacıkları, çevrelerindeki bazı ifadeler olmadan çok yararlı değildir. Ayrıca bulabilirsiniz iyi bir cevap yazmayı çok yararlı. Lütfen cevabınızı düzenleyin - Yorumdan
Nick

1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

0

bunu Faaliyetinize ekleyin:

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