Ekran göründüğünde bir alanın otomatik odaklama / klavye açılır penceresi nasıl kaldırılır?


105

İlk alanın EditText olduğu bir ekranım var ve başlangıçta odağı kazanıyor, ayrıca çok can sıkıcı olan sayısal girdi türünü de açıyor

Aktivite başladığında odağın kazanılmadığından ve / veya giriş panelinin kaldırılmadığından nasıl emin olabilirim?

Yanıtlar:


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

veya

uygulama etiketinde aşağıdaki gibi manifest dosyasında etkinlik özelliğini ayarlayın

android:windowSoftInputMode="stateHidden"

AndroidManifest.xml dosyasında android: windowSoftInputMode ayarı diğer değerlerle ORed yapılabilir. Mod tipik olarak tek değerleri ifade eder, ancak bu durumda değer bir bayraklar koleksiyonudur. Değerlerin açıklaması:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir

145

uygulama bildirim dosyanıza gidin ve otomatik klavye açılır penceresini devre dışı bırakmak istediğiniz etkinlik için bu satırı yazın.

android:windowSoftInputMode="stateHidden"

Benim için çalışmadı. Bunu activity_main.xml'e koydum. Bu, onu onCreate () içine koyduğumda mükemmel çalıştı. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

Programlı olarak klavyenin görüntülenmemesi, ancak varsayılan widget yine de odak çağrısı alması için:

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

içinde onResume()


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

onCreate () içindeki yukarıdaki yöntemi çağırın . kullanıcı tarafından Metin Düzenle seçeneğini seçmedikçe softKeyboard'un gösterilmesini engeller .tapping or clicking.

veya sadece android:windowSoftInputMode="stateHidden"Etkinlik etiketini şuraya ekleyin :Manifest.xml


10

Bu genellikle bir karmaşa. İlk denediğim şey, odağı başka bir görünümle çalmaya çalışmak. Ayrıca odaklanabilir ve odaklanabilir InTouchMode'a sahip olmalısınız.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

Bu çalışıyor. Bunun daha temiz bir yaklaşım olduğunu düşünüyorum ama aynı zamanda koşullarınızın nasıl olduğuna da bağlı. Bunu kabul ediyorum.
JaydeepW

5

Başka bir görüşün odaklanmasını sağlayın. Varsayılan olarak, ilk odaklanabilir Görünüm, bir düzen şişirildiğinde odaklanır. XML aracılığıyla farklı bir Görünüme odaklanmayı isteyebilirsiniz:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Bu, herhangi bir Görünüm için çalışır.

Programlı olarak yapmak istiyorsanız kullanabilirsiniz view.requestFocus().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
StackOverflow'a hoş geldiniz! Bu, diğer forumlara benzemez, cevabınızı değiştirmek isterseniz, sadece editbağlantıya tıklayın ve değişikliklerinizi yapın. Ve lütfen kodunuzu seçip Kod Örneği düğmesini kullanarak {}veya düğmesine basarak kodunuzu biçimlendirmeyi deneyin Ctrl+K.
Peter Lang

0

android:windowSoftInputMode="stateHidden"Manifest'te Etkinliğinize ekleme yapmak, klavyeyi yalnızca etkinliği başlattığınızda veya Google'ın söylediği gibi gizler

Kullanıcı, başka bir etkinlikten ayrıldığı için geri dönmek yerine olumlu bir şekilde etkinliğe ileri gittiğinde

Kullanıcı geri düğmesine bastığında ve başka bir etkinlikten etkinliğinize geri döndüğünde de klavyeyi gizlemek için şunu kullanın: android:windowSoftInputMode="stateAlwaysHidden"


-1

bunu denemedim ya da programlama bilgisayarımın yakınında değilim, ancak odağı ana görünüme programla göndermenin veya bu tür bir şeyin işe yarayabileceğinden şüpheleniyorum - bu muhtemelen bir çözümden daha geçici bir çözümdür, ancak yine de test edemiyorum Bir Düşünce


1
Bunu denedim ama işe yaramıyor. .requestFocus();Bir düğmeyi aradım ve hala klavye açılır pencereleri.
Pentium10

düşünceler yorum olarak eklenebilir
Alberto M
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.