Ich arbeite an einer Android-Anwendung, in der ich DialogFragment
den Dialog anzeige, dessen Breite jedoch sehr gering ist. Wie kann ich diese Breite fill_parent
dazu machen?
public class AddNoteDialogFragment extends DialogFragment {
public AddNoteDialogFragment() {
// Empty constructor required for DialogFragment
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setTitle(getString(R.string.app_name));
View view = inflater.inflate(R.layout.fragment_add_note_dialog,
container);
return view;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
// request a window without the title
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
}
fragment_add_note_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<EditText
android:id="@+id/addNoteEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="@string/clock_enter_add_note"
android:imeOptions="actionDone"
android:inputType="textCapSentences|textMultiLine"
android:lines="5" />
<Button
android:id="@+id/submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/login_button"
android:text="@string/submit_button"
android:textColor="@android:color/white" />
</LinearLayout>
Antworten:
Dies ist die Lösung, die ich gefunden habe, um dieses Problem zu lösen:
Bearbeiten:
Sie können den folgenden Code in der
onCrateView
Methode Fragment verwenden, bevor Sie die aufgeblasene Ansicht zurückgeben.quelle
dialog.getWindow().setBackgroundDrawable(null);
getDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dieonResume()
Methode von DialogFragment eingebe . Bei deronCreateView()
Methode hat es nicht funktioniert . Ich habe die Antwort leicht vondialog
auf geändertgetDialog()
.setLayout
in deronStart
Methode funktioniert perfekt. Vielen Dank.Haben Sie versucht, die Antwort von Elvis aus So verwenden Sie einen Warndialog, der 90% der Bildschirmgröße ausfüllt ?
Es ist das Folgende:
Aktualisieren:
Der obige Code sollte innerhalb der
onStart()
Methode des hinzugefügt werdenDialogFragment
.quelle
WindowManager.LayoutParams.FILL_PARENT
.ViewGroup.LayoutParams
, so dass es in beiden Fällen einwandfrei funktioniert.onStart
Methode des DialogFragments befinden, damit er funktioniert.onCreateDialog
Das ist für mich gearbeitet
Erstellen Sie Ihren benutzerdefinierten Stil:
Verwenden Sie diesen Stil in Ihrem Dialog
quelle
Bei mir hat es funktioniert, als ich das LinearLayout-übergeordnete Element des in onCreateView aufgeblasenen Layouts durch RelativeLayout ersetzt habe. Keine weitere Codeänderung erforderlich.
quelle
oben in meinem Dialog Layout hat den Trick gemacht.
quelle
Wenn Sie mehr Flexibilität wünschen, können Sie AppCompat_Dialog_Alert und benutzerdefinierte Attribute erweitern
quelle
In meinem Fall habe ich auch den folgenden Ansatz verwendet:
Bei einigen Lollipop + -Geräten (z. B. Nexus 9) gab es jedoch immer noch kleine Lücken 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 auf allen Geräten und Plattformen in voller Breite angezeigt wird :
Und natürlich muss dieser Stil verwendet werden, wenn wir den Dialog wie folgt erstellen:
quelle
Basierend auf anderen Lösungen habe ich meine eigenen erstellt.
quelle
Ich möchte das klarstellen. Beide Wege sind richtig, aber mit unterschiedlichem DialogFragment .
Verwenden von
android.app.DialogFragment
Verwenden von
android.support.v4.app.DialogFragment
quelle
Eine andere Lösung, die für mich ohne Nebenwirkungen funktioniert, war:
In Ihrer Klasse, die DialogFragment erweitert:
In Ihren Stilen:
quelle
setStyle()
Das funktioniert bei mir perfekt.
Hierdurch können Sie dem Dialogfragment die Breite geben.
quelle
Erstellen Sie einen benutzerdefinierten Stil in Ihrer Datei style.xml. Kopieren Sie einfach diesen Code und fügen Sie ihn in Ihre style.xml-Datei ein
Erstellen Sie dann in der Methode createDialog Ihres DialogFragments das Dialogobjekt anhand des Codes
Das funktioniert bei mir und ich hoffe, das hilft auch Ihnen
quelle
So habe ich es gelöst, als ich mit diesem Problem konfrontiert wurde. Versuche dies.
Fügen Sie diesen Code in onActivityCreated Ihres DialogFragments entsprechend Ihren Anforderungen hinzu.
quelle
Verwenden Sie dies in der onCreateView-Methode von DialogFragment
220 ist die Höhe des Dialogfragments. Ändern Sie es nach Ihren Wünschen
quelle
Benutzer AlertDialog.Builder in Ihrem DialogFragment. Fügen Sie es in dieser
onCreateDialog
Methode hinzu. UndonCreateView
nichts tun.quelle
Setzen Sie in Ihrem Layout-Stammverzeichnis android: minWidth auf einen sehr großen Wert, z
quelle
Ich habe mehrere oben aufgeführte Antworten ausprobiert. Sie haben nicht für mich gearbeitet. Dies ist die Lösung für mein Problem:
In
DialogFragment()
, fügen Sie die folgenden Codes:quelle