2014-12-14 3 views
0

Я расширил EditTextPreference, но диалоговое сообщение не будет отображаться. Это происходит, если я добавляю dialogMessage программно или в файл preferences.xml.Расширить EditTextPreference и отобразить 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); 
} 

ответ

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

и добавить следующая строка в методе onAddEditTextToDialogView после вызова removeAllViews:

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