Ich versuche, ein DialogFragment im Vollbildmodus anzuzeigen. Aber ich bin irgendwie nicht dazu in der Lage.
Die Art und Weise, wie ich das Fragment zeige, stammt direkt aus der Android-Entwicklerdokumentation
FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");
Ich weiß naiv versucht, das RelativeLayout im Fragment auf fill_parent und einige minWidth und minHeight zu setzen.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="1000px"
android:minHeight="600px"
android:background="#ff0000">
Ich würde wissen, dass das DialogFragment den größten Teil des Bildschirms ausfüllt. Aber ich scheine die Größe nur vertikal zu ändern, aber nur bis eine feste Breite horizontal.
Ich habe auch versucht, die Fensterattribute im Code festzulegen, wie hier vorgeschlagen: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Aber das hat auch nicht geholfen.
Ich verstehe wahrscheinlich etwas falsch darüber, wie Android mit Dialogen umgeht, da ich brandneu darin bin. Wie kann ich so etwas machen? Gibt es alternative Wege, um mein Ziel zu erreichen?
Android-Gerät:
Asus EeePad Transformer
Android 3.0.1
Update: Ich habe es jetzt geschafft, es mit dem folgenden Code im Fragment in den Vollbildmodus zu bringen
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
Leider will ich das nicht ganz. Ich brauche definitiv ein kleines "Auffüllen" um den Dialog, um den Hintergrund anzuzeigen.
Irgendwelche Ideen, wie man das erreicht?
Antworten:
Versuchen Sie, zu a
LinearLayout
statt zu wechselnRelativeLayout
. Ich habe beim Testen auf die 3.0 Honeycomb-API abgezielt.und die Layouts : fragment_dialog.xml
main.xml
quelle
So rufen Sie DialogFragment im Vollbildmodus auf
Überschreiben
onStart
Ihrer DialogFragment wie folgt aus :Und vielen Dank an diesen Beitrag: Das Geheimnis der Androiden-Vollbild-Dialogfragmente
quelle
ViewGroup.LayoutParams.WRAP_CONTENT
für die Höhe verwendet. Vielen Dank.quelle
Laut diesem Link zeigt DialogFragment Vollbild Polsterung an den Seiten, dies wird wie ein Zauber funktionieren.
quelle
Erstellen Sie ein Vollbild-DialogFragment, indem Sie nur den Stil verwenden
Erste Lösung
1. Fügen Sie hinzu
style.xml
:2. Fügen Sie Ihrem DialogFragment Folgendes hinzu:
Alternative Lösung
Wo
AppTheme
ist das Thema, das Sie in Stilen definiert haben?quelle
In meinem Fall habe ich folgenden Ansatz verwendet:
Plus LinearLayout, um den gesamten Raum mit Inhalten zu füllen.
Aber es gab immer noch kleine Lücken einigen Lollipop + -Geräten (z. B. Nexus 9) zwischen dem linken und rechten Rand des Dialogfelds und den Bildschirmkanten.
Es war nicht offensichtlich, aber schließlich habe ich herausgefunden, dass der Fensterhintergrund in der Datei styles.xml wie folgt angegeben werden sollte , damit er über alle Geräte und Plattformen hinweg in voller Breite angezeigt wird :
Und natürlich muss dieser Stil verwendet werden, wenn wir den Dialog wie folgt erstellen:
quelle
<item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item>
Quelle: TechRepublicIch habe das Problem bereits bei der Verwendung eines Vollbild-Dialogfelds festgestellt. Fragment: Beim Festlegen des Vollbildmodus wird immer eine Auffüllung angezeigt. Versuchen Sie diesen Code in der onActivityCreated () -Methode von dialogFragment:
quelle
Soweit die Android-API aktualisiert wurde, wird folgende Methode vorgeschlagen, um einen Vollbilddialog anzuzeigen:
Andernfalls können Sie Folgendes tun, wenn Sie nicht möchten, dass es im Vollbildmodus angezeigt wird:
Ich hoffe es hilft.
BEARBEITEN
Beachten Sie, dass die von mir angegebene Lösung funktioniert, aber eine Schwäche aufweist, die manchmal problematisch sein kann. Hinzufügen des DialogFragments zum
android.R.id.content
Container können Sie das nicht verarbeitenDialogFragment#setCancelable()
Funktion korrekt , und kann zu unerwarteten Verhaltensweisen führen, wenn Sie das DialogFragment selbst ebenfalls zum Backstack hinzufügen.Daher habe ich Ihnen vorgeschlagen, den Stil Ihres DialogFragments in der onCreate-Methode wie folgt zu ändern:
Ich hoffe es hilft.
quelle
Versuchen Sie, setStyle () in onCreate zu verwenden und überschreiben Sie den onCreateDialog make-Dialog ohne Titel
oder überschreiben Sie einfach onCreate () und setzen Sie den Code auf den Code.
quelle
Dies kann in der Tat davon abhängen, wie das Layout definiert ist. Um sicherzustellen, dass der Dialog die erforderliche Größe erhält, besteht die beste Lösung darin, die LayoutParams bereitzustellen, sobald der Dialog angezeigt wird (und nicht bei der Erstellung). In einem DialogFragment wird der Dialog in der onStart- Methode angezeigt. Eine gültige Methode zum Abrufen der vollen Breite lautet also:
Um auch ein Thema oder einen Stil wie einen NO_TITLE-Stil bereitzustellen, befindet sich die beste Position in der onCreate- Methode:
quelle
Hinweis: Auch hier findet man die richtige Antwort. Aber ich möchte eine Verwirrung klären.
Verwenden Sie den folgenden Code für
android.app.DialogFragment
Verwenden Sie den folgenden Code für
android.support.v4.app.DialogFragment
quelle
Und die Kotlin-Version!
quelle
Dies ist die Lösung, wie ich dieses Problem herausgefunden habe:
quelle
Erstellen Sie das folgende Thema in Ihrer style.xml:
Legen Sie dann den Stil in DialogFragment fest
quelle
Chirag Nagariya hat Recht, mit Ausnahme des Zusatzes '_Fullscreen'. Es kann mit jedem Basisstil gelöst werden, der nicht vom Dialogstil abgeleitet ist. 'android.R.style.Theme_Black_NoTitleBar' kann ebenfalls verwendet werden.
quelle
Falls jemand anderes darauf stößt, hatte ich eine ähnliche Erfahrung, aber es stellte sich heraus, dass das Problem darin bestand, dass ich vergessen hatte, die aufgeblasene Ansicht von onCreateView zurückzugeben (stattdessen die Standardeinstellung super.onCreateView zurückzugeben). Ich habe einfach die richtige aufgeblasene Ansicht zurückgegeben und das hat das Problem gelöst.
quelle
Diese Lösung wendet ein Vollbild-Thema auf den Dialog an, das Chirags setStyle in onCreate ähnelt. Ein Nachteil ist, dass savedInstanceState nicht verwendet wird.
quelle
Versuchen Sie dies für einen allgemeinen Fragmentdialog für mehrere Zwecke. Hoffe das hilft dir besser
quelle
Folgendes müssen Sie einstellen, um zu fragmentieren:
In deinem Fall:
Und warum? Da DialogFragment (wenn nicht explizit angegeben) seine inneren Stile verwendet, die Ihr benutzerdefiniertes Layout darin einschließen (kein Vollbild usw.).
Und Layout? Kein hackiger Weg nötig, das funktioniert einwandfrei:
Genießen
quelle
Ich bin sehr spät für die Beantwortung dieser Frage, dennoch möchte ich diese Antwort teilen, damit in Zukunft jeder diese verwenden kann.
Ich habe diesen Code in meinem Projekt verwendet. Er funktioniert sowohl in der niedrigeren als auch in der höheren Version.
Verwenden Sie dieses Thema einfach in onCreateDialog () wie folgt:
android.R.style.Theme_Black_NoTitleBar_Fullscreen - Hier ist der Quellcode für dieses Thema. Nur dieses Thema reicht aus, um DialogFragment im Vollbildmodus anzuzeigen.
Bitte lassen Sie mich wissen, wenn jemand auf ein Problem stößt. Hoffe das ist hilfreich. Vielen Dank :)
quelle
Die folgende Methode funktioniert auch, wenn Sie an einem relativen Layout arbeiten. Befolgen Sie die folgenden Schritte:
Gehen Sie zu styles.xml und fügen Sie unter dem gerade hinzugefügten Thema die beiden folgenden Attribute hinzu:
Meine Themeneinstellung für den Dialog lautet wie folgt:
Stellen Sie sicher, dass das Thema ein übergeordnetes Thema als Theme.AppCompat.Dialog hat. Eine andere Möglichkeit besteht darin, einen neuen Stil in styles.xml zu erstellen und ihn gemäß dem obigen Code zu ändern.
Wechseln Sie zu Ihrer Dialogfragmentklasse und legen Sie in der onCreate () -Methode den Stil Ihres Dialogs wie folgt fest :
@Override public void onCreate (@Nullable Bundle savedInstanceState) {super.onCreate (savedInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }}
quelle
Fügen Sie diese folgenden Zeilen im Stil des Vollbilddialogs hinzu.
quelle
window.setLayout
ist nicht genug für ältere Geräte.Folgendes mache ich:
quelle
quelle
Eine Lösung unter Verwendung des neuen
ConstraintLayout
ist das Einwickeln desConstraintLayout
in aLinearLayout
mit minHeight und minWidth behoben. Ohne die Umhüllung erhält ConstraintLayout nicht die richtige Größe für den Dialog.quelle
Arbeitete für mich in Kotlin,
quelle
Die folgende Lösung funktionierte für mich. Andere Lösung gab mir etwas Platz in den Seiten, dh nicht im Vollbildmodus
Sie müssen Änderungen an der Methode onStart und onCreate vornehmen
quelle