Как установить название DialogFragment?

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

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

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

Ответ 1

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

Ответ 2

Переопределяет ли onCreateDialog и устанавливает заголовок непосредственно на Dialog? Вот так:

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

Ответ 3

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

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

Ответ 4

Вы можете посмотреть официальные документы . То, как я это сделал, выглядит следующим образом:

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