2017-02-25 5 views
2

Das Widget "TimePickerDialog" im PreferenceScreen im Querformat ist zu klein. screenshotWidget "TimePickerDialog" im Querformat (PreferenceScreen)

Ich habe beiden Ansätze ausprobiert (PreferenceActivity und PreferenceFragments) nach dieser Anleitung: TimePicker in PreferenceScreen

Das TimePickerDialog Layout ist im Querformat, leer, wenn ein Timepicker Titel verwenden. Also habe ich den Titel deaktiviert. In der PreferenceActivity Version habe ich setDialogTitle(""); zu TimePreference hinzugefügt. In der PreferenceFragmentCompat Version habe ich den folgenden Code TimePreference hinzugefügt:

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

In beiden Versionen wird die Uhr in der Landschaft präsentiert, aber das Widget ist zu klein; (Ich habe keine Probleme mit zu kleinen Widgets, wenn ich Timepickerdialoge ohne Titel außerhalb des PreferenceScreen verwende)

Irgendwelche Ideen, wie man TimePicker im PreferenceScreen implementiert, damit das Layout im Querformat funktioniert?

Antwort

1

Das gleiche Problem hier auf einem Motorola Moto G5 Plus Telefon, Android 7, im Querformat-Modus. Porträt ist in Ordnung. Aus der Protokollausgabe sieht es so aus, als ob der Einstellungsalarmdialog einschließlich des Zeitpickers vertikal auf dem Bildschirm passt, so dass zu wenig vertikaler Platz im Dialogfeld für das Zeitpicker-Widget verbleibt. Mögliche Lösungen:

  • Im Falle von nur wenigen dp des vertikalen Raum im Dialog fehlt, die <TimePicker> in einem <ScrollView> Verpackung.

  • Skalierung des TimePickers mithilfe der XML-Eigenschaften android:scaleX und android:scaleY (How to make the TimePicker smaller). Ich teste das gerade.

  • Das Einstellen der App Vollbild/immersiv kann hilfreich sein, da sie die verfügbare Höhe erhöht.

  • Einstellen des Timepicker Widget 'Spinner' Modus, android:timePickerMode="spinner"

Edit: Die scaleX ist scaleY Lösung funktionell, aber die Timepicker sieht hässlich aus. Wenn Sie die App als Vollbild festlegen, werden die UI-Steuerelemente auf dem Bildschirm entfernt, was für viele Apps möglicherweise nicht die beste Wahl ist. Das Verpacken des Zeitpickers in einem Scrollview ist ebenfalls nicht optimal.

Ich habe zwei XML TimePicker-Layouts erstellt, eines mit android:timePickerMode="spinner", das andere mit "clock". Das Uhr-Layout wird mit dem Ressourcen-Qualifier (Suffix im Ordnernamen) für die verfügbare Bildschirmhöhe ausgewählt: "h360dp". So dass die Uhr nur angezeigt wird, wenn die verfügbare Bildschirmhöhe des Geräts in der aktuellen Ausrichtung, mit Ausnahme der UI-Steuerelemente auf dem Bildschirm, größer als 360 dpi ist. Nicht optimal, aber es funktioniert.

Bearbeiten 2: Der unten beschriebene Ansatz ist besser. Getestet und funktioniert auf echten Geräten von Android 4 bis 7. Der TimePicker Dialog wird korrekt in Querformat angezeigt.

Schritte sind:

  • Fügen Sie ein allgemeines Preference Element in der XML-Einstellungsdatei auf dieser Präferenz
  • Stellen Sie einen Klick-Listener onPreferenceTreeClick()
  • Wenn dieses angeklickt wird, eine regelmäßige zeigen (nicht Kompatibilitätsbibliothek) TimePickerDialog wie im 'Pickers' Guide https://developer.android.com/guide/topics/ui/controls/pickers.html
  • beschrieben Speichern Sie die Zeit auf dem TimePicker manuell in SharedPreferences

Ich habe Beispielcode aller Codedateien hier auf Stackoverflow beteiligt: ​​Appcompatactivity with custom native (not compatibility) dialogpreference containing a TimePicker