2010-11-23 17 views
47

Edittext görünümü olan bir iletişim kutusu görüntülüyorum. Ancak, softkeyboard yalnızca kullanıcı düzenleme görünümüne bastığında açılır. Bu yüzden aşağıdaki kodla bir InputMethodManager'ı aramayı denedim.İletişim kutusu için yumuşak klavye göster

dialogField, giriş alanıdır. Ancak, tam olarak ne zaman yapmam gerekiyor? Bunu iletişim kutusunun onStart() yönteminde denedim, ancak hiçbir şey olmuyor. Daha önce dialogField için odağı sormayı denedim, ama bu hiçbir şeyi değiştirmiyor.

Ben de her iki versiyonda da bu kodu

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener() 
{ 
    public void onFocusChange (View v, boolean hasFocus) 
    { 
     if (hasFocus) 
     { 
      Main.log("here"); 
      dialogInput.getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
      /* 
       InputMethodManager mgr = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       mgr.showSoftInput(dialogField,0); 
      */ 
     } 
    } 
}); 

çalıştı. Ancak, yumuşak bir klavye görünmek istemez. Main.log sadece işlevin aslında çağrıldığını gösteren bir kayıttır. Ve evet, denir.

Klavyeyi, iletişim kutusu açılmadan önce SHOW_FORCED bayrağı ile alabilirim. Ama sonra çıkışta kapanmayacak. Ve ben sadece diyalogu göstermeden ÖNCE yapabilirim. Herhangi bir geri aramada da işe yaramıyor.

+0

SHOW_IMPLICIT bayrağını denediniz mi? –

+1

Bu, aşırı derecede mücadele ettiğim, ancak düzgün çalışamadığım bir şey. – Thomas

+0

Evet, SHOW_IMPLICIT bayrağını denedim. Belgeler, kullanıcının TextEdit için girdi yapması bekleniyorsa showSoftInput'u çağırmanız gerektiğini belirtir. Ama nasıl? – Rene

cevap

-3

Bu imkansız gibi görünüyor.

Bu nedenle, İletişim Kutusu yerine yeni bir Etkinlik oluşturdum ve kullanıcının oradaki düzenlemesine izin verdim. Aktivitelerde, manifesto dosyasında klavye modunu ayarlayabileceğinizi unutmayın. Etkinlik açıldığında göstermeyi ayarladım.

Ayrıca, emülatörde sabit tuşlarla yapılan sınamaların klavyesini SHOW_IMPLICIT veya 0 bayrağı için açmayacağını unutmayın.

+1

Yani bu mümkün olmadı mı? –

+0

Mümkün, kabul edilen cevaba bakınız. –

+0

@MertSerimer Kabul edilmeyen bir cevap yok: P – SparK

130

Harika soru, ben de bunu yapmaya çalışıyordum ve bir çözüm buldum.

böyle diyaloğu çağırmak zorunda kalacak AlertDialog.Builder iletişim oluşturucu sınıfını kullanarak:

AlertDialog.Builder builder = new AlertDialog.Builder(); 
AlertDialog dialog; 

builder.set... 

dialog = builder.create(); 
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
dialog.show(); 

Bu benim için iyi çalıştı.

Not: Burada sabit değer için import android.view.WindowManager.LayoutParams; olmalıdır.

+1

benim için çalışıyor, teşekkürler – ericn

+0

İletişim penceresinden sonra pencerenin davranışını nasıl etkileyeceğini merak ediyorum ... pencerenin diyaloğu ve aktivitelerinizi de içerdiğini unutmayalım –

+0

klavyeyi bir "her zaman açık" davranışa ayarlamayın; bu, diyalog açılırken yalnızca açık klavye yöntemini tetikler. Kullanıcı "geri tuşu" na bastığında veya giriş alanını terk ettikten sonra, klavye normalde olduğu gibi tekrar kapanır. – SparK