DialogFragment의 제목을 설정하는 방법?


163

이것은 간단한 작업이어야하지만 어떤 이유로 DialogFragment 제목을 설정하는 방법을 찾을 수 있습니다 . ( onCreateView오버로드를 사용하여 대화 상자 내용을 설정하고 있습니다 ).

기본 스타일은 제목의 자리를 떠나지 만 DialogFragment클래스 에서 제목 을 설정하는 메소드를 찾을 수 없습니다 .

제목은 onCreateDialog방법을 사용하여 내용을 설정하는 경우 어떻게 든 마술처럼 설정 되므로 이것이 의도 한 것인지 궁금하거나 onCreateView과부하를 사용할 때 설정하는 특별한 트릭이 있는지 궁금합니다 .

답변:


312

당신이 사용할 수있는 getDialog().setTitle("My Dialog Title")

이처럼 :

public static class MyDialogFragment extends DialogFragment {
    ...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Set title for this dialog
        getDialog().setTitle("My Dialog Title");

        View v = inflater.inflate(R.layout.mydialog, container, false);
        // ...
        return v;
    }
    // ...
}

6
예, 실제로 getDialog (). setTitle ()이 트릭을 수행합니다. 솔루션을 살펴본 후에는 그렇게 작동하는 것이 합리적이지만 어떤 이유로 제목을 DialogFragment 클래스 자체 (setStyle () 및 DialogFragment.STYLE_NO_TITLE이 정의 된 동일한 위치)에 설정해야한다고 기대했습니다. 솔루션 주셔서 대단히 감사합니다.
StefanK

1
타이틀의 배경을 바꾸려면 어떻게해야합니까? 가능합니까?
MinceMan

5
또한 대화 상자가 아직 생성되지 않았으므로 조각의 onCreate () 메소드에서 대화 상자 제목을 설정할 수 없습니다.
greg7gkb

2
@Rob Holmes 대화 상자 클래스 외부에서 제목을 설정하고 싶습니다 (인스턴스를 생성하는 위치). 즉 MyDialogFragment myFragment = 새 MyDialogFragment (); myFragment.getDialog (). setTitle ( "myTitle"); myFragment.show (getFragmentManager (), "myTitle"); 그러나이 시점에서 getDialog ()가 null을 반환하는 것처럼 보입니다. 여기에서 제목을 설정하는 다른 방법이 있습니까? (나만의 setTitle methdo를 만들지 않고)
David Doria

1
나는 일반적인 경우에 Jason의 접근 방식이 더 정확하다고 생각합니다.
Michel

74

작품 onCreateDialog에서 제목을 재정의 하고 직접 설정 합니까 Dialog? 이처럼 :

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle("My Title");
    return dialog;
}

9
조각이 대화 상자에서뿐만 아니라 사용할 수 있기 때문에 귀하의 솔루션은 더 나은
RUX

이 솔루션은 xamarin.android에도 유용합니다.
Shittu Joseph Olugbenga

또한 위의 코드를 기반으로 내 최근 대답을 참조하십시오 stackoverflow.com/a/41798042/1617737
금지 - 지구 공학

14

제이슨의 대답 은 저에게 도움이되었지만 이제 제목을 표시하려면 다음 추가 사항이 필요합니다.

먼저 MyDialogFragment의 onCreate()메소드에서 다음을 추가하십시오.

setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialogFragmentStyle);

그런 다음 styles.xml 파일에서 다음을 추가하십시오.

<style name="MyDialogFragmentStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">false</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">false</item>
</style>

여러 가지 다른 일을 시도한 후에, 이것은 나를 위해 트릭을 한 유일한 사람입니다.

NB- Theme.AppCompat.Light.Dialog.Alert테마 스타일에 맞게를 다른 것으로 변경해야 할 수도 있습니다 .


에서 android:windowNoTitle false전환 한 후 설정 이 필요하지 않았으며 제목이 중복되어 한 번만 설정 되었음에도 불구하고 충분하지 않았습니다. Android.Support.V7.App.AppCompatDialogFragmentAndroid.Support.V4.App.DialogFragment
samis

2

DialogFragment는 대화 및 활동으로 표시 될 수 있습니다. 아래 코드를 모두 사용하십시오.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (getShowsDialog()) {
        getDialog().setTitle(marketName);
    } else {
        getActivity().setTitle(marketName);
    }
}

1

공식 문서를 볼 수 있습니다 . 내가 한 방식은 다음과 같습니다.

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
            .setTitle("My Title");
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.my_layout, null);
    builder.setView(view);

    return builder.create();
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.