【问题标题】:Extend EditTextPreference and display the DialogMessage扩展 EditTextPreference 并显示 DialogMessage
【发布时间】:2015-02-12 20:33:19
【问题描述】:

我已扩展 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);
}

【问题讨论】:

    标签: android edittextpreference dialog-preference


    【解决方案1】:

    对话消息真的不存在吗?它可能在那里,但它的文本颜色可能会使其不那么可见(或不可见)。 (或尝试关闭软件键盘)。尝试使用包含多个“\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);
    }
    

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

        container.setPadding(container.getPaddingLeft(), 0, container.getPaddingRight(), container.getPaddingBottom());
    

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多