눌렀을 때 DatePicker를 만드는 EditText를 원합니다. 그래서 다음 코드를 작성합니다.
mEditInit = (EditText) findViewById(R.id.date_init);
mEditInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(DATEINIT_DIALOG);
}
});
그러나 EditText를 누르면 일반적인 동작입니다. 텍스트 입력을 기다리는 커서가 원하는 대화 상자를 대신 표시합니다.
답변
EditText가 포커스를 받으면 키보드가 팝업되는 것 같습니다. 이를 방지하려면 focusable을 false로 설정하십시오.
<EditText
...
android:focusable="false"
... />
이 동작은 제조업체의 Android OS 버전에 따라 다를 수 있지만 테스트 한 장치에서이 정도면 충분하다는 것을 알았습니다. 키보드가 여전히 팝업되면 텍스트 대신 힌트를 사용하는 것도 도움이되는 것 같습니다.
myEditText.setText("My text"); // instead of this...
myEditText.setHint("My text"); // try this
이 작업을 완료하면 클릭 리스너가 원하는대로 작동합니다.
myEditText.setOnClickListener(new OnClickListener() {...});
답변
일반적으로 EditText
의 정상적인 동작 과 최대한의 호환성을 원합니다 .
그렇기 때문에보기가 더 이상 초점을 맞출 수 없어 보이는 것처럼 사용 해서는 안됩니다android:focusable="false"
. 예를 들어 배경 드로어 블은 더 이상 “눌려진”상태를 표시하지 않습니다.
대신해야 할 일은 다음과 같습니다.
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// showMyDialog();
}
});
myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// showMyDialog();
}
}
});
입력 유형을로 설정하면 TYPE_NULL
소프트웨어 키보드가 팝업되지 않습니다.
을 설정 OnClickListener
하고 OnFocusChangeListener
, 당신이 당신의 대화가 항상 열립니다 있는지 확인시에 사용자가 클릭 EditText
필드, 둘 다 초점 (첫 번째 클릭) 및 후속 클릭에를 얻는 경우.
그냥 설정 android:inputType="none"
하거나 setInputType(InputType.TYPE_NULL)
항상 충분하지는 않습니다. 일부 장치의 경우 android:editable="false"
더 이상 사용되지 않지만 XML로 설정해야합니다 . 더 이상 작동하지 않으면 무시됩니다 (지원되지 않는 모든 XML 속성).
답변
나는 이와 같은 문제가 있었다. 코드는 괜찮지 만 EditText의 focusable 값을 false로 변경해야합니다.
<EditText
android:id="@+id/date"
android:focusable="false"/>
나는 이것이 비슷한 문제를 가진 모든 사람에게 도움이되기를 바랍니다!
답변
기본 작업 EditText
: 첫 번째 클릭에서 초점을 맞추고 두 번째 클릭에서 처리 onClickListener
하므로 초점을 비활성화해야합니다. 그런 다음 처음 클릭하면 onClickListener
will 핸들이 처리됩니다.
그렇게하려면이 android:focusableInTouchMode="false"
속성을 EditText
. 그게 다야!
이 같은:
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="false"
android:inputType="text" />
답변
내가 구현 한 솔루션은 다음과 같습니다.
mPickDate.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
showDialog(DATE_DIALOG_ID);
return false;
}
});
또는
mPickDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
showDialog(DATE_DIALOG_ID);
}
});
차이점을 직접 확인하십시오. 문제는 (RickNotFred가 말한 것처럼) TextView가 DatePicker를 통해 날짜를 표시하고 편집하기 때문입니다. 텍스트 편집기는 기본 목적으로 사용되지 않습니다. DatePicker가 다시 팝업되도록하려면 delete (첫 번째 경우) 또는 de focus (두 번째 경우)를 입력해야합니다.
레이
답변
EditText에서 OnClick 작업을 다음과 같이 사용하는 경우 :
자바:
mEditInit = (EditText) findViewById(R.id.date_init);
mEditInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(DATEINIT_DIALOG);
}
});
또는 kotlin :
editTextChooseDate.setOnClickListener {
showDialog(DATEINIT_DIALOG)
}
그래서, 당신이 유입되면 완벽하게 작동합니다 xml
당신의 EditText
다음 줄 :
android : inputType = “none”
android : focusable = “false”
android : cursorVisible = “false”
예를 들면 :
<EditText
android:id="@+id/date_init"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:hint="Select Date"
android:inputType="none"
android:focusable="false"
android:cursorVisible="false"/>
또는 MaterialDesign
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layoutEditTextChooseDate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/date_init"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:hint="Select Date"
android:inputType="none"
android:focusable="false"
android:cursorVisible="false"/>
</com.google.android.material.textfield.TextInputLayout>
답변
IMHO 나는 RickNotFred의 진술에 동의하지 않습니다.
EditText가 포커스를받을 때 대화 상자를 표시하는 것은 비표준 인터페이스처럼 보입니다.
사용자가 EditText를 누를 때 날짜를 편집하는 대화 상자를 표시하는 것은 키보드 또는 숫자 키패드 를 표시하는 기본값과 매우 유사합니다 . 날짜가 EditText와 함께 표시된다는 사실은 날짜가 변경 될 수 있음을 사용자에게 알립니다. 날짜를 편집 할 수없는 TextView로 표시하면 날짜를 변경할 수 없음을 사용자에게 알립니다.