Ich implementiere einen Dialog mit zwei Feldern EditText
. Gemäß den Material Design-Spezifikationen sollte diese Art von Dialog auf kleineren Geräten im Vollbildmodus angezeigt werden, während sie auf großen Bildschirmen in einem Dialogfenster angezeigt werden sollte.DialogFragment als Dialog angezeigt Ändert die Größe des Vollbilds bei Orientierungsänderung
Um dies zu erreichen, habe ich die Implementierung von der developer.android.com guide on Dialogs gefolgt.
Dies funktioniert gut für kleinere Bildschirme, aber für große Bildschirme belegt das Dialogfenster nach einer Orientierungsänderung den ganzen Bildschirm.
-Code zur Darstellung des DialogFragment
(Teil onOptionsItemSelected()
in meinem AppCompatActivity
)
mIsLargeLayout = getResources().getBoolean(R.bool.large_layout);
FragmentManager fragmentManager = getSupportFragmentManager();
mDialog = MyDialogFragment.newInstance(mIsLargeLayout);
if (mIsLargeLayout)
{
// The device is using a large layout, so show the fragment as a dialog
mDialog.show(fragmentManager, "dialog");
}
else
{
// The device is smaller, so show the fragment fullscreen
FragmentTransaction transaction = fragmentManager.beginTransaction();
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, mDialog, "dialog")
.addToBackStack(null)
.commit();
}
Für die DialogFragment
, ich zum ersten Mal onCreateView()
außer Kraft setzen zu meinen benutzerdefinierten Layout aufblasen:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme);
View v = inflater.inflate(R.layout.dialog_filter_audio_files,
container, false);
// code for Buttons and EditTexts here:
// set listeners etc.
return v;
}
... und dann onCreateDialog()
mit den folgenden Aussagen:
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setCancelable(true);
dialog.getWindow().setBackgroundDrawableResource(R.color.c_background_dark);
return dialog;
ich nicht entlassen, die DialogFragment
auf Änderung Orientierung aber in onRestoreInstanceState()
ich wieder an die DialogFragment
wie folgt aus:
mDialog = (DialogFilterAudiofiles) getSupportFragmentManager().findFragmentByTag("dialog");
Während der Benutzer in der Lage, den Dialog ganz gleich, zu vervollständigen, wie es aussieht, würde ich Ich mag es, den Dialog klein zu halten - genau wie vor der Orientierung.
Natürlich könnte ich den Dialog in onSaveInstanceState()
nach dem Speichern der Eingabe so weit entlassen und dann einen neuen Dialog in onRestoreInstanceState()
zeigen. Oder ich könnte mit DialogFragment
s basierend auf AlertDialog
und setContentView()
arbeiten, wenn die Bildschirmgröße groß ist.
Gibt es eine andere Möglichkeit, den Beispielcode aus dem Handbuch zu beheben?
BEARBEITEN Ich möchte so nah wie möglich an der "ein Layout passt für alle Größen" -Ansatz bleiben.
Meine Implementierung von "onCreateView()" ist inspiriert von, aber erweitert den Beispielcode, also habe ich den relevanten Teil im obigen Text hinzugefügt.
Kann ich bei diesem Ansatz immer noch Vollbilddialoge für kleine Geräte verwenden? Das Beispiel aus dem Handbuch schlug vor, dass für beide Optionen ein und dasselbe Layout verwendet werden kann. Mit - OK - einige Tasten zum Ausblenden hier und ein Menü zum Aufblasen. Das Fragment erhält den Wert "mIsLargeLayout" und passt sich an die Situation an – 0X0nosugar