我给android:singleLine="true"
选项EditTextPreference
,并且当对话框中的编辑框有焦点时,软件键盘显示“完成”按钮来代替Enter键。但是,如果按下完成按钮,只有软件键盘关闭,而且我仍然需要单击对话框上的完成按钮。如何使EditTextPreference对话框中的Enter键工作
反正有软键盘上的回车键和时间动作键关闭对话框并应用新值吗?
我给android:singleLine="true"
选项EditTextPreference
,并且当对话框中的编辑框有焦点时,软件键盘显示“完成”按钮来代替Enter键。但是,如果按下完成按钮,只有软件键盘关闭,而且我仍然需要单击对话框上的完成按钮。如何使EditTextPreference对话框中的Enter键工作
反正有软键盘上的回车键和时间动作键关闭对话框并应用新值吗?
首先,我设置的IME期权IME_ACTION_DONE
mEditTextPreference.getEditText().setImeOptions(EditorInfo.IME_ACTION_DONE);
然后使用以下代码保存值并关闭对话框。
mEditTextPreference.getEditText().setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE){
//mEditTextPreference.setText(mEditTextPreference.getEditText().getText().toString());
//better solution
mEditTextPreference.onClick(mEditTextPreference.getDialog(), Dialog.BUTTON_POSITIVE);
mEditTextPreference.getDialog().dismiss();
return true;
}
return false;
}
});
您是否尝试过在编辑文本的XML中使用using android:inputType="textCapSentences"
(textCapSentences是众多选项之一)。我有一个类似的问题,并能够解决它也让我控制我可以显示什么键盘。
举例来说,如果我有一些领域唯一我可以用android:inputType="number"
这将首先显示的数字键盘VS QWERTY键盘,也有很多不同的选择
对不起,我看到这很晚,但我不在乎键盘类型。我只想输入键来关闭对话框并应用更改后的值。我想我必须为此创建自己的对话框。 – dasony 2012-02-02 14:45:39
我认为DialogPreference
与EditText
当用户按下完成按钮和软键盘应该关闭通常总是关闭本身。为了在默认情况下实现这种行为,很容易实现自定义EditTextPreferenceCustomized
,然后在任何地方使用它,而不是标准EditTextPreference
。
import android.app.Dialog;
import android.content.Context;
import android.preference.EditTextPreference;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
public class EditTextPreferenceCustomized extends EditTextPreference
{
public EditTextPreferenceCustomized(Context context)
{
super(context);
}
public EditTextPreferenceCustomized(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public EditTextPreferenceCustomized(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onAddEditTextToDialogView(View dialogView, EditText editText)
{
super.onAddEditTextToDialogView(dialogView, editText);
// editText.setImeOptions(EditorInfo.IME_ACTION_DONE); - uncomment if it's not specified in preferences.xml
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if(actionId == EditorInfo.IME_ACTION_DONE)
{
onClick(getDialog(), Dialog.BUTTON_POSITIVE);
getDialog().dismiss();
return true;
}
return false;
}
});
}
}
的代码部分基于从@LZN乐于助人的解决方案,但是这将消除设置的操作侦听器的Java代码中每一个偏好的需要。只需将preferences.xml中的所有实例EditTextPreference
替换为com.yourpackage.EditTextPreferenceCustomized
即可。
谢谢。在调用'dismiss()'之前,我可以通过调用'editPref.onClick(editPref.getDialog(),DialogInterface.BUTTON_POSITIVE);'来欺骗它。这是一种骇人的方式,但这样我可以重复使用相同的逻辑。 – dasony 2012-03-21 05:06:40
你的解决方案比我的更好,我把它合并到了帖子中。谢谢:D – LZN 2012-03-26 02:35:19
更好的是在你的编辑文本中设置xml布局中的ime,例如:android:imeOptions =“actionDone”'。 – 2014-05-21 20:34:45