그래서 일반적인 문제인 것 같습니다. 즉, 대화 상자의 EditText가 포커스를받을 때 표시되지 않는다는 것입니다. 나는 this thread , this one and this one (and more)와 같은 몇 가지 해결 방법을 보았지만 처음 에 왜 이런 일이 발생 하는지에 대한 만족스러운 설명을 보지 못했습니다 .
나는 안드로이드가 내 자신을 만드는 것보다 EditTexts에 대한 자체 기본 동작을 사용하는 것을 훨씬 선호하지만, 모든 사람 (해당 스레드의)이 대화 상자의 EditText에 대한 기본 동작은 커서 만 제공하고 키보드를 제공하지 않는 것임을 인정한 것 같습니다. 왜 그럴까요?
기록을 위해, 이러한 해결 방법 중 어느 것도 나를 위해 작동하지 않는 것 같습니다. 내가 올 수 있었던 가장 가까운 방법은 키보드를 대화 상자 아래에 강제로 표시하는 것입니다 (InputMethodManager.toggleSoftKeyboard (*) 사용). 내 특정 구성은 API15이며 EditText는 AlertDialog 내 ListView의 바닥 글에 표시됩니다. EditText android : focusable = "true"가 설정되고 onFocusChangeListener 가 포커스 이벤트를 수신합니다.
편집하다:
요청한대로 여기에 제가 작업중인 특정 코드 스 니펫이 있습니다. 전체 레이아웃은 신경 쓰지 않지만이 특정 응용 프로그램에서는 대화 상자의 버튼을 누르면 EditText가 나타납니다 ( 액션 뷰 와 유사 ). 기본적으로 가시성이 "사라진"RelativeLayout에 포함됩니다.
<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>
이를 빌드하는 코드는 relativeLayout의 가시성을 "Visible"로 설정하고 다른 UI 요소를 숨 깁니다. 이것은 해야 글고 치기가 글고 내 경험을 바탕으로, 집중됩니다 때 키보드를 끌어하기에 충분. 그러나 어떤 이유로 이것은 사실이 아닙니다. 다음 onFocusChangeListener를 설정할 수 있습니다.
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."));
}
}
});
이 구성을 사용 하여 EditText를 처음 입력하면 onFocusChangedListener가 트리거되고 항상 다음과 같은 로그를 생성합니다.
Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.
키보드가 표시되었다가 사라집니다. 아마도 두 번 토글하기 때문일 것입니다.하지만 계속 켜져 있는지 확인하더라도 대화 창 뒤에 있습니다 (회색으로 표시된 영역). 대화 상자를 닫지 않고는 액세스 할 수 없습니다. .
그게 내가 작업에 주위 작업이를받을 수 있습니다 비록 내가있어, 그 강조하고 싶습니다 말했다 주로 관심이 간단한 이유를 찾는 이유 글고 치기는 처음에 트리거되지 않습니다, 그리고 왜이 너무 평범한 것 같습니다!