Wie setze ich den Titel von DialogFragment?

Lesezeit: 5 Minuten

Benutzer-Avatar
StefanK

Dies sollte eine einfache Aufgabe sein, aber aus irgendeinem Grund kann ich einen Weg finden, den Titel von a festzulegen DialogFragment. (Ich setze den Dialoginhalt mit onCreateView Überlast).

Der Standardstil lässt Platz für den Titel, aber ich kann keine Methode finden DialogFragment Klasse, um es einzustellen.

Der Titel ist irgendwie magisch gesetzt, wenn die onCreateDialog -Methode wird verwendet, um den Inhalt festzulegen, daher frage ich mich, ob dies beabsichtigt ist oder ob es einen speziellen Trick gibt, um ihn festzulegen, wenn die verwendet wird onCreateView Überlast.

Benutzer-Avatar
Rob Holmes

Sie können verwenden getDialog().setTitle("My Dialog Title")

Genau wie dieser:

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;
    }
    // ...
}

  • Ja, tatsächlich funktioniert getDialog().setTitle(). Nachdem ich mir die Lösung angesehen habe, macht es sehr viel Sinn, auf diese Weise zu arbeiten, aber aus irgendeinem Grund habe ich erwartet, dass der Aufruf den Titel auf die DialogFragment-Klasse selbst setzt (gleiche Stelle, an der setStyle() und DialogFragment.STYLE_NO_TITLE definiert sind). Vielen Dank für die Lösung.

    – StefanK

    8. April 2011 um 11:53 Uhr

  • Was ist, wenn ich den Hintergrund des Titels ändern möchte? Ist das möglich?

    – Hackmann

    22. Januar 2012 um 2:55 Uhr

  • Beachten Sie auch, dass Sie den Dialogtitel nicht in der Methode onCreate() des Fragments festlegen können, da der Dialog noch nicht erstellt wurde 🙂

    – greg7gkb

    22. Juni 2012 um 18:28 Uhr

  • @Rob Holmes Ich möchte den Titel außerhalb der Dialogklasse festlegen (wo ich die Instanz erstelle). Dh MyDialogFragment myFragment = new MyDialogFragment(); meinFragment.getDialog().setTitle(“meinTitel”); myFragment.show(getFragmentManager(), “myTitle”); Es scheint jedoch, als würde getDialog() an dieser Stelle null zurückgeben. Gibt es eine andere Möglichkeit, den Titel von hier aus festzulegen (ohne meine eigene setTitle-Methode zu erstellen)?

    – David Doria

    17. September 2013 um 12:00 Uhr

  • Ich glaube, Jasons Ansatz unten ist im allgemeinen Fall richtiger.

    – Michel

    6. Januar 2015 um 19:13 Uhr

Überschreibt onCreateDialog und setzen Sie den Titel direkt auf die Dialog Arbeit? So was:

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

  • Ihre Lösung ist besser, da fragment nicht nur in Dialogen verwendet werden kann

    – ruX

    18. Juni 2014 um 15:31 Uhr

  • Diese Lösung ist auch für xamarin.android nützlich

    – Shittu Joseph Olugbenga

    9. Dezember 2014 um 10:53 Uhr

  • Siehe auch meine neuere Antwort, die auf dem obigen Code basiert: stackoverflow.com/a/41798042/1617737

    – Ban-Geoengineering

    23. Januar 2017 um 1:28 Uhr


Benutzer-Avatar
Ban-Geoengineering

Jasons Antwort hat früher für mich funktioniert, aber jetzt sind die folgenden Ergänzungen erforderlich, damit der Titel angezeigt wird.

Erstens in Ihrem MyDialogFragment onCreate() Methode, füge hinzu:

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

Fügen Sie dann in Ihrer Datei styles.xml Folgendes hinzu:

<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>

Nachdem ich stundenlang verschiedene Dinge ausprobiert habe, ist dies die einzige, die den Trick für mich getan hat.

NB – Möglicherweise müssen Sie die ändern Theme.AppCompat.Light.Dialog.Alert zu etwas anderem, um dem Stil Ihres Themas zu entsprechen.

  • Einstellung android:windowNoTitle false war nach der Umstellung auf nicht erforderlich Android.Support.V7.App.AppCompatDialogFragment aus Android.Support.V4.App.DialogFragmentnoch ausreichend, da dies zu doppelten Titeln führte (obwohl ich sicherstellte, dass es nur einmal festgelegt wurde).

    – samus

    11. März 2019 um 19:41 Uhr


DialogFragment könnte als Dialog und als Aktivität dargestellt werden. Verwenden Sie den folgenden Code, der für beide ordnungsgemäß funktioniert

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

Sie können einen Blick auf die werfen offizielle Dokumente. So habe ich es gemacht:

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

Ähnlich wie die Antwort von Ban Geoengineering, jedoch mit einigen Änderungen, anstatt zu codieren, welches spezifische Thema in der verwendet werden soll DialogFragmentüberschreibe ich den Standardstil, der von verwendet wird DialogFragmentist in meinem styles.xml.

Setzen Sie den Titel in die androidx.fragment.app.DialogFragment.

class EditBatteryLevelFragment:DialogFragment(),SelfClosingFragment.Host
{
    override fun onCreateView(
        inflater:LayoutInflater,container:ViewGroup?,savedInstanceState:Bundle?
    ):View
    {
        // set dialog title
        requireDialog().setTitle(R.string.edit_battery_level__title)

        // .....
        return someView
    }
}

in Ihrem App-Design in styles.xmlüberschreiben android:dialogThemewas der Standardstil ist, der von verwendet wird DialogFragment Instanzen.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppTheme" parent="Theme.MaterialComponents">

        <!-- BONUS READING: override material colors here, too https://material.io/develop/android/theming/color -->

        <!-- override DialogFragment theme of those spawned by activities with this theme -->
        <item name="android:dialogTheme">@style/AppTheme.Dialog</item>

    </style>

    <!-- ... -->

auch in styles.xmldeklarieren Sie das Dialogdesign, das von verwendet wird DialogFragment Instanzen. Es ist wichtig, dass dieser Stil erbt ThemeOverlay damit die Designfarben Ihrer App erhalten bleiben.

    <!-- ... -->

    <!-- define the style for your dialog -->
    <style name="AppTheme.Dialog" parent="ThemeOverlay.MaterialComponents.Dialog">

        <!-- add a minimun width to the dialog, so it's not too narrow -->
        <item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
        <item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>

        <!-- display the title for dialogs -->
        <item name="android:windowNoTitle">false</item>

    </style>

</resources>

Stellen Sie sicher, dass die Aktivität, die die erzeugt DialogFragment verwendet die definierte AppTheme.

Benutzer-Avatar
Taha

Wenn Sie Ansichtsbindung verwenden:

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    binding = YourDialogXmlBinding.inflate(getLayoutInflater());
    AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
    builder.setTitle("Your title here")
            .setView(binding.getRoot());
    return builder.create();
}

1344270cookie-checkWie setze ich den Titel von DialogFragment?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy