Android 扩展EditTextPreference并显示对话框消息
我已扩展EditTextPreference,但对话框消息不会显示。如果我以编程方式或在preferences.xml中添加dialogMessage,就会发生这种情况 以下是我的onBindDialogView:Android 扩展EditTextPreference并显示对话框消息,android,edittextpreference,dialog-preference,Android,Edittextpreference,Dialog Preference,我已扩展EditTextPreference,但对话框消息不会显示。如果我以编程方式或在preferences.xml中添加dialogMessage,就会发生这种情况 以下是我的onBindDialogView: AutoCompleteTextView editText = mEditText; editText.setText(getText()); ViewParent oldParent = editText.getParent(); if (oldParent != view) {
AutoCompleteTextView editText = mEditText;
editText.setText(getText());
ViewParent oldParent = editText.getParent();
if (oldParent != view) {
if (oldParent != null) {
((ViewGroup) oldParent).removeView(editText);
}
onAddEditTextToDialogView(view, editText);
}
对话信息真的不存在吗?它可能在那里,但它的文本颜色可能会使它变得不太可见或不可见。或者尝试关闭软件键盘。尝试尝试使用具有多个字符的对话框消息,\n并查看这是否会影响对话框布局。如果是这样,这意味着对话框消息实际上在那里,但伪装得太好了 EditTextPreference在preference_dialog_edittext.xml中提供了一个文本视图,它取代了对话框消息的alert_dialog.xml中的现有文本视图,但不幸的是,该文本视图具有不同的文本样式,这可能会在某些主题下导致可见性问题。甚至它们的尺寸也不一样 一种解决方案可能是从要替换的原始文本视图中获取文本颜色和大小,并将其应用于新的文本视图,但我建议保留原始文本视图,因为如果将来有任何UI更改,它更可能在视觉上保持一致。尝试添加以下覆盖
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
super.onPrepareDialogBuilder(builder);
builder.setMessage(getDialogMessage()); // bring back the original text view
}
protected void onAddEditTextToDialogView(View dialogView, EditText editText) {
int id = getContext().getResources().getIdentifier("edittext_container", "id", "android");
ViewGroup container = (ViewGroup) dialogView.findViewById(id);
container.removeAllViews(); // remove the new text view
super.onAddEditTextToDialogView(dialogView, editText);
}
如果您认为对话框消息和edittext视图之间的距离太远,可以通过添加另一个覆盖将它们拉近一点:
protected void showDialog(Bundle state) {
super.showDialog(state);
int id = getContext().getResources().getIdentifier("message", "id", "android");
TextView message = (TextView) getDialog().findViewById(id);
message.setPadding(message.getPaddingLeft(), message.getPaddingTop(), message.getPaddingRight(), 0);
}
并在调用RemoveAllView后,在onAddEditTextToDialogView方法中添加以下行:
container.setPadding(container.getPaddingLeft(), 0, container.getPaddingRight(), container.getPaddingBottom());