xge*_*86x 76 android android-edittext
我想要一个EditText,按下时会创建一个DatePicker.所以我写下一个代码:
mEditInit = (EditText) findViewById(R.id.date_init);
mEditInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(DATEINIT_DIALOG);
}
});
Run Code Online (Sandbox Code Playgroud)
但是当我按下EditText时,动作是典型的:等待键入文本的光标改为显示我想要的对话框.
任何的想法?
谢谢
小智 122
当EditText获得焦点时,键盘似乎会弹出.要防止这种情况,请将focusable设置为false:
<EditText
...
android:focusable="false"
... />
Run Code Online (Sandbox Code Playgroud)
这种行为可能因不同制造商的Android操作系统风格而有所不同,但在我测试的设备上,我发现这已经足够了.如果键盘仍然弹出,使用提示而不是文本似乎也有帮助:
myEditText.setText("My text"); // instead of this...
myEditText.setHint("My text"); // try this
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您的on click侦听器应该按照需要运行:
myEditText.setOnClickListener(new OnClickListener() {...});
Run Code Online (Sandbox Code Playgroud)
caw*_*caw 54
通常,您希望最大程度地兼容EditText正常行为.
所以,你应该不使用android:focusable="false"的,是的,视图将只是不可聚焦了它的日子也不好过.例如,背景drawable将不再显示其"按下"状态.
您应该做的是以下内容:
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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
通过将输入类型设置为TYPE_NULL,可以防止弹出软件键盘.
通过设置OnClickListener和OnFocusChangeListener,您可以确保在用户点击EditText字段时始终打开对话框,无论是获得焦点(第一次点击)还是后续点击.
只是设定android:inputType="none"或setInputType(InputType.TYPE_NULL)不总是足够.对于某些设备,您也应该android:editable="false"在XML中设置,尽管它已被弃用.如果它不再起作用,它将被忽略(因为所有不支持的XML属性).
小智 31
我有同样的问题.代码很好,但请确保将EditText的可聚焦值更改为false.
<EditText
android:id="@+id/date"
android:focusable="false"/>
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助任何遇到类似问题的人!
Aks*_*iya 22
默认工作EditText:首先单击它焦点,然后在第二次单击它处理,onClickListener所以你需要禁用焦点.然后在第一次单击onClickListener将处理.
为此,您需要将此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" />
Run Code Online (Sandbox Code Playgroud)
Ray*_*non 15
这是我实施的解决方案
mPickDate.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
showDialog(DATE_DIALOG_ID);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
要么
mPickDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
showDialog(DATE_DIALOG_ID);
}
});
Run Code Online (Sandbox Code Playgroud)
亲自看看差异.问题是因为(像RickNotFred所说)TextView通过DatePicker显示日期和编辑.TextEdit不用于其主要目的.如果要重新弹出DatePicker,则需要输入delete(第一种情况)或de focus(第二种情况).
射线
V.M*_*rch 12
如果您在 EditText 上使用 OnClick 操作,例如:
爪哇:
mEditInit = (EditText) findViewById(R.id.date_init);
mEditInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(DATEINIT_DIALOG);
}
});
Run Code Online (Sandbox Code Playgroud)
或科特林:
editTextChooseDate.setOnClickListener {
showDialog(DATEINIT_DIALOG)
}
Run Code Online (Sandbox Code Playgroud)
因此,如果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"/>
Run Code Online (Sandbox Code Playgroud)
或 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>
Run Code Online (Sandbox Code Playgroud)
恕我直言,我不同意RickNotFred的声明:
当EditText获得焦点时弹出对话框似乎是非标准接口.
当用户按下EditText时,显示一个对话框来编辑日期与默认情况非常相似,即显示键盘或数字键盘.使用EditText显示日期的信号向用户发出可能更改日期的信号.将日期显示为不可编辑的TextView会向用户发出可能不会更改日期的信号.
以下对我来说非常适合.
首先将日期选择器窗口小部件的输入设置为"无",以防止弹出软键盘:
<EditText android:inputType="none" ... ></EditText>
Run Code Online (Sandbox Code Playgroud)
然后添加这些事件侦听器以显示包含日期选择器的对话框:
// Date picker
EditText dateEdit = (EditText) findViewById(R.id.date);
dateOfBirthEdit.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
showDialog(DIALOG_DATE_PICKER);
}
return false;
}
});
dateEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showDialog(DIALOG_DATE_PICKER);
} else {
dismissDialog(DIALOG_DATE_PICKER);
}
}
});
Run Code Online (Sandbox Code Playgroud)
最后一件事.要确保从日期选择器中正确复制键入的日期,月份或年份,请datePicker.clearFocus()在检索值之前调用,例如通过getMonth().
好主题.好吧,我已经这样做了.在XML文件中:
<EditText
...
android:editable="false"
android:inputType="none" />
Run Code Online (Sandbox Code Playgroud)
在Java代码中:
txtDay.setOnClickListener(onOnClickEvent);
txtDay.setOnFocusChangeListener(onFocusChangeEvent);
private View.OnClickListener onOnClickEvent = new View.OnClickListener() {
@Override
public void onClick(View view) {
dpDialog.show();
}
};
private View.OnFocusChangeListener onFocusChangeEvent = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
dpDialog.show();
}
};
Run Code Online (Sandbox Code Playgroud)
这对我有用:
mEditInit = (EditText) findViewById(R.id.date_init);
mEditInit.setKeyListener(null);
mEditInit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
{
mEditInit.callOnClick();
}
}
});
mEditInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(DATEINIT_DIALOG);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134212 次 |
| 最近记录: |