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.
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:
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:windowNoTitlefalse 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:
Ä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.
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();
}
13442700cookie-checkWie setze ich den Titel von DialogFragment?yes