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.