2014-12-14 10 views
0

EditTextPreference를 확장했지만 대화 메시지가 표시되지 않습니다. 이것은 dialogMessage를 프로그래밍 방식으로 또는 preferences.xml에 추가하면 발생합니다.EditTextPreference 확장 및 DialogMessage 표시

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

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

답변

0

대화 메시지가 정말 존재하지 않는다 : 여기

내 onBindDialogView입니까? 어쩌면 거기에 있지만 텍스트 색상으로 인해 보이지 않게 될 수도 있습니다. (또는 소프트웨어 키보드를 닫으려고 시도하십시오). "\ n"문자가있는 대화 메시지를 실험 해보고 대화 레이아웃에 영향을 주는지 확인하십시오. 그렇다면 대화 메시지가 실제로 거기에 있지만 너무 잘 위장되었음을 의미합니다.

EditTextPreference는 alert_dialog.xml의 기존 메시지를 대화 메시지로 대체하지만 불행하게도 특정 테마에서 가시성 문제를 일으킬 수있는 다른 텍스트 스타일을 사용하는 텍스트 뷰를 가져옵니다 (preference_dialog_edittext.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); 
} 

당신이 대화 메시지와 글고보기 멀리 떨어져 너무 생각한다면

을 추가하십시오 :

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