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


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

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

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

5 155

5 ответов:

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

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

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

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

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

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

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

вы можете взглянуть на официальные документы. Кстати я сделал так:

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

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

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