Я думаю, что 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.Просто замените в файлеferences.xml все экземпляры от EditTextPreference
до com.yourpackage.EditTextPreferenceCustomized
.