Bu yüzden, ortak bir sorun gibi görünen bir şeye sahibim, o da iletişim kutumdaki EditText odaklandığında görünmüyor. Bu konu , bu ve bu (ve daha fazlası) gibi birkaç geçici çözüm gördüm , ancak bunun neden ilk başta olduğuna dair tatmin edici bir açıklama görmedim .
Android'in EditTexts için kendi varsayılan davranışını kullanmasını tercih ederim, ancak görünüşe göre herkes (bu konulardaki) Dialogs'taki EditTexts için varsayılan davranışın sadece bir imleç vermek ve klavye vermemek olduğunu kabul etti. Bu neden olur?
Kayıt için, bu geçici çözümlerin hiçbiri benim için işe yaramıyor - gelebildiğim en yakın şey, bir klavyeyi iletişim kutusunun altında görünmeye zorlamaktır (InputMethodManager.toggleSoftKeyboard (*) kullanarak). Benim özel konfigürasyonum API15, EditText bir AlertDialog içindeki ListView üzerinde bir altbilgide görünüyor. "True" odaklanabilir = ayarlanır ve onFocusChangeListener: EditText android olan odak olayları alma.
Düzenle:
İstendiği gibi, üzerinde çalıştığım özel kod parçacığı burada. Tüm düzen ile uğraşmayacağım, ancak bu özel uygulamada, iletişim kutusundaki bir düğmeye basıldığında ( bir işlem görünümüne benzer ) EditText görünür . Varsayılan olarak görünürlüğü "gitmiş" olan bir RelativeLayout içinde bulunur:
<RelativeLayout
android:id="@+id/relLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<ImageButton
android:id="@+id/cancelBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@color/transparent"
android:src="@drawable/cancelButton"
android:layout_margin="5dp"/>
<ImageButton
android:id="@+id/okBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/cancelBut"
android:background="@color/transparent"
android:src="@drawable/okButton"
android:layout_margin="5dp" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:focusable="true"
android:layout_toLeftOf="@id/okBut"/>
</RelativeLayout>
Bunu oluşturan kod, relativeLayout'un görünürlüğünü "Visible" olarak ayarlar (ve diğer UI öğelerini gizler). Bu , EditText deneyimime dayalı olarak EditText odaklandığında klavyeyi açmak için yeterli olmalıdır . Ancak, bazı nedenlerden dolayı durum böyle değil. Aşağıdakileri onFocusChangeListener ayarlayabilirim:
edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// For whatever reason we need to request a soft keyboard.
InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE);
if(hasFocus)
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus."));
}
}
});
Bu yapılandırmayı kullanarak , EditText'e ilk girdiğimde, onFocusChangedListener tetiklenir ve her zaman şuna benzeyen bir günlük oluşturur:
Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.
Klavye ortaya çıkıyor ve sonra kayboluyor, muhtemelen iki kez değiştirdiğim için, ancak açık kaldığından emin olsam bile , iletişim penceresinin arkasında (grileşmiş bir alanda) ve iletişim kutusunu kapatmadan ona ulaşmanın bir yolu yok .
Bununla birlikte, bu geçici çözümün işe yaramasına rağmen, öncelikle EditText'in neden ilk etapta tetiklenmediğinin ve bunun neden basit bir nedenini bulmakla ilgilendiğimi vurgulamak isterim. çok sıradan görünüyor!