Android ekran klavyesi otomatik açılır


140

Uygulamalarımdan birinde "açılış ekranı" (temelde bir menü) ve EditTextardından birkaç Buttons harfi var. Sorun şu ki, bazı kullanıcılarım uygulamayı açtıklarında, ekran klavyesini bile dokunmadan otomatik olarak açtıklarını bildiriyorlar EditText. Anlayabildiğim kadarıyla, bu kullanıcıların tümü HTC Hero kullanıyor .

Bu 1.5 sürümünde bir hata mı? Bu konuda yapabileceğim bir şey var mı?


1
Eğer bir hata varsa, muhtemelen Sprint Hero'da. Sprint, sattıkları Heros'ta Android'in buggy bir sürümüne sahip ve bunun için hata düzeltmelerini itme telaşı içinde görünmüyorlar. Sprint Kahramanları ve diğer tüm Android cihazlar arasında tonlarca davranış farklılığı vardır. Bildiğim kadarıyla, Hero'nun Avrupa'daki gibi diğer versiyonları bu sorunlara sahip değil.
Mark B

maalesef burada kahramanlar Avrupa'da büyük sorunlar yaşıyorlar, yapı numarasına bağlı olarak değişiyorlar ama 3-4 büyük hata ile karşılaştık.
Donal Rafferty

Yanıtlar:


279

Etkinliğin onCreate yönteminde aşağıdaki kod satırını kullanarak, klavyenin yalnızca bir kullanıcı EditText'i tıkladığında açıldığından emin olun.

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

Bu benim için işe yaramıyor (2.2 MyTouch 3G). Benim onCreate () yönteminde, setSoftInputMode () çağırıyorum. EditText hala klavyenin göstermesine neden oluyor :(
Nate

Bu benim için çalıştı. Android 2.3.4 çalıştırıyorum ve <uses-sdk android kullanarak geliştiriyorum: minSdkVersion = "3" />
Sandy

78
Veya burada olduğuandroid:windowSoftInputMode="stateHidden" gibi kullanın
Swato

Beni şaşırtan şey, klavyeyi gayet iyi saklıyor gibi görünen bir giriş etkinliğim olması. Ben de şimdi bir kayıt etkinliği yaptım ama klavye varsayılan olarak açılır. Peki giriş yapmaktan kaçınıyor? Giriş etkinliğinde setSoftInputMode veya activity.xml dosyasında windowSoftInputMode özniteliğini bulamıyorum.
Chucky

her zaman çalışmaz: bazı cihazlarda SOFT_INPUT_STATE_ALWAYS_HIDDEN, etkinlikte son olmayan düzenleme metninin yazılım klavyesinin görünmesine neden olamamasına neden olur. manifest'te "android: windowSoftInputMode =" stateHidden "" kullanmak da aynı etkiye sahiptir. geliştirici dokümanlar, zorunlu klavyenin zorunlu olmadığı sürece otomatik olarak görünmeyeceğini belirtir, ancak bu sadece yanlıştır.

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

Bu Android 3.0, 3.1, 3.2, 4.0 için çalışır - Derlemek için kullanılan Editör (Eclipse 3.7)

Yazılım klavyesinin gizli kalmasını istediğiniz HER etkinlik için 'windowSoftInputMode = "stateHidden" öğesini uygulamanızın manifest XML dosyasına yerleştirin. Bu, klavyenin otomatik olarak çıkmayacağı ve kullanıcının bir metin alanı getirmek. Neredeyse bir saat çalışmış bir şey aradım, bu yüzden paylaşacağımı düşündüm.


Şimdiye kadar bulduğum en iyi çözüm. Klavyeyi açmadan alana odaklanır. 4.1.2 ile Nexus S üzerinde çalışıyor
alexismorin

1
android: windowSoftInputMode = "stateHidden | adjustNothing", parça kullanıyorsanız ve klavyenin düzeni değiştirmesini istemiyorsanız da
yararlıdır

6

Bunu AndroidManifest.xml dosyasına ekleyin :

android:windowSoftInputMode="stateHidden|adjustResize"

Mükemmel çalışıyor. :)


1
Cevap için teşekkür ederim. Üzgünüm, şimdi klavyeyi nasıl arayabilirim? Göründüğünde görünmez requestFocus().
Takesi Tokugawa YD

6

Bu kod tüm android sürümlerinde çalışacaktır:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

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

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

Artı 1 hangi açılır ve hangisi değil söylemek için
Demon App Programmer

4

Bunu XML'nin üst düzenine ekleyin.

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

Etkinlik başladığında odağın editText'te olmamasını sağlar.


3

Bunu, etkinliğin onCreate () yönteminde kullanabilirsiniz

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

veya bu kodu AndroidManifest.xml'deki Etkinlik etiketlerine yapıştırın

android:windowSoftInputMode="stateVisible"

2
Bence "stateVisible" yerine "stateHidden" demek istediniz.
stevehs17

2

Etkinlik kodunun altına Android Mainfest.xml dosyasına tek bir kod satırı ekleyebilirsiniz.

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

bu size yardımcı olabilir.


1

Android'in bu sürümünde, bir görünüm şişirildiğinde, odak varsayılan olarak ilk odaklanabilir kontrole ayarlanır - ve fiziksel klavye yoksa, ekran klavyesi açılır.

Bunu düzeltmek için, odağı açıkça başka bir yere ayarlayın. Odak bir EditText dışında bir değere ayarlanırsa, ekran klavyesi görünmez.

Emülatörde Android 1.5 çalıştırarak bunu test etmeyi denediniz mi?


Emülatörde denedim (ve sadece deli olmadığımdan emin olmak için tekrar yaptım). "Doğru" (klavye açılır penceresi yok) anlamına gelir. Ayrıca, ilk başta bunu yazdığımda G1'im 1.5 çalışıyordu ve bu şekilde hareket etmedi (klavye "gizli" olduğunda).
Jeremy Logan

Bahse girerim ilk odak noktasıyla ilgisi vardır. Belki HTC Hero'ya özgü bir şey, ancak odağı açıkça başka bir şeye ayarlamayı dener ve bunun kullanıcılarınız için düzeltilip düzeltilmediğini görürüm.
Mark B

"Hiçbir şeye" odaklanmanın bir yolu var mı?
Jeremy Logan

1
Bu benim için işe yaramıyor (2.2 MyTouch 3G). Benim onCreate () yönteminde, açıkça görünümdeki ikinci widget olan bir Düğme üzerinde requestFocus () çağırıyorum. EditText hala klavyenin göstermesine neden oluyor :(
Nate

1

Programlı olarak yapabilirsiniz

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

veya set android:windowSoftInputMode="stateHidden"içinde <activity tagAndroidManifest.xml


1

İçe aktarma işlemlerinin en üstte olduğu yere ekleyin:

import android.view.WindowManager;

Bu kodu OnCreate parçasına ekleyin:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Bu Android.xamarin ve FindFocus () içindir - yukarıdaki koddan önce _enterPin.RequestFocus () olduğu için şu anda odağa sahip olan bu görünümde köklü hiyerarşideki görünümü arar, böylece _enterPin EditText için klavye gösterir *

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.