Как установить заголовок DialogFragment? - PullRequest
160 голосов
/ 04 марта 2011

Это должно быть простым заданием, но по какой-то причине я могу найти способ установить заголовок DialogFragment .(Я устанавливаю содержимое диалога, используя перегрузку onCreateView).

Стиль по умолчанию оставляет место для заголовка, но я не могу найти какой-либо метод в классе DialogFragment для его установки.

Заголовок каким-то волшебным образом устанавливается, когда для установки содержимого используется метод onCreateDialog, поэтому мне интересно, задано ли это по замыслу, или есть специальный прием для его установки при использовании перегрузки onCreateView.

Ответы [ 5 ]

308 голосов
/ 08 апреля 2011

Вы можете использовать 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;
    }
    // ...
}
73 голосов
/ 04 марта 2011

Работает ли переопределение onCreateDialog и установка заголовка непосредственно на Dialog?Как это:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle("My Title");
    return dialog;
}
12 голосов
/ 23 января 2017

Ответ Джейсона раньше работал на меня, но теперь для получения заголовка нужны следующие дополнения.

Во-первых, в методе onCreate() вашего MyDialogFragment добавьте:

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 на что-то другое, чтобы соответствовать стилю вашей темы.

2 голосов
/ 17 февраля 2018

DialogFragment может быть представлен как диалог и как Activity. Используйте код ниже, который будет работать правильно для обоих

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (getShowsDialog()) {
        getDialog().setTitle(marketName);
    } else {
        getActivity().setTitle(marketName);
    }
}
1 голос
/ 08 ноября 2017

Вы можете посмотреть официальные документы .Вот как я это сделал:

@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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...