1

我已扩展 EditTextPreference,但不会显示对话框消息。如果我以编程方式或在preferences.xml 中添加dialogMessage,就会发生这种情况。

这是我的onBindDialogView:

AutoCompleteTextView editText = mEditText;
editText.setText(getText());

ViewParent oldParent = editText.getParent();
if (oldParent != view) {
    if (oldParent != null) {
        ((ViewGroup) oldParent).removeView(editText);
    }
    onAddEditTextToDialogView(view, editText);
}
4

1 回答 1

0

对话消息真的不存在吗?它可能在那里,但它的文本颜色可能会使其不那么可见(或不可见)。(或尝试关闭软件键盘)。尝试使用包含多个“\n”字符的对话框消息,看看是否会影响对话框布局。如果是这样,则意味着对话消息确实存在,但伪装得太好了。

EditTextPreference 带来了一个文本视图(在preference_dialog_edittext.xml 中),它替换了对话框消息的现有视图(在alert_dialog.xml 中),但不幸的是使用不同的文本样式,这可能会导致某些主题下的可见性问题。甚至它们的尺寸也不同。

一种解决方案可能是从要替换的原始文本视图中获取文本颜色和大小并将它们应用到新的文本视图中,但我建议保留原始文本视图,因为如果有的话,它更有可能在视觉上保持一致未来的用户界面更改。尝试添加以下覆盖

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);
}

并在调用 removeAllViews 后在 onAddEditTextToDialogView 方法中添加以下行:

    container.setPadding(container.getPaddingLeft(), 0, container.getPaddingRight(), container.getPaddingBottom());
于 2015-03-05T11:57:40.683 回答