我給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