2017-02-25 5 views
2

Le widget TimePickerDialog dans PreferenceScreen en mode paysage est trop petit. screenshotWidget TimePickerDialog en mode paysage (PreferenceScreen)

J'ai essayé les deux approches (PreferenceActivity et PreferenceFragments) selon les instructions suivantes: TimePicker in PreferenceScreen

La mise en page TimePickerDialog est vide en mode paysage, lorsque vous utilisez un titre de timepicker. J'ai donc désactivé le titre. Dans la version PreferenceActivity, j'ai ajouté setDialogTitle(""); à TimePreference. Dans la version PreferenceFragmentCompat j'ai ajouté le code suivant à TimePreference:

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

Dans les deux versions, l'horloge est présenté dans le paysage, mais le widget est trop petit; (Je n'ai pas de problèmes avec les widgets trop petits, lors de l'utilisation timepickerdialogs sans titres en dehors de l'écran Preference)

Des idées pour implémenter TimePicker dans le PreferenceScreen, de sorte que la mise en page est ok en mode paysage?

Répondre

1

Même problème ici sur un téléphone Motorola Moto G5 Plus, Android 7, en mode paysage. Le portrait est ok. De la sortie du journal, il semble que la préférence alertdialog, y compris le timepicker, est ajustée verticalement sur l'écran, laissant ainsi trop peu d'espace vertical dans la boîte de dialogue pour le widget timepicker. Solutions possibles:

  • Dans le cas d'un peu d'espace vertical de quelques disparus dp dans le dialogue, enveloppant le <TimePicker> dans un <ScrollView>.

  • Mise à l'échelle du TimePicker à l'aide des propriétés XML android:scaleX et android:scaleY (How to make the TimePicker smaller). Je suis actuellement en train de tester ça.

  • La définition de l'application en mode plein écran/immersif peut être utile car elle augmente la «hauteur disponible».

  • Réglage du widget TimePicker en mode 'spinner', android:timePickerMode="spinner"

Edit: scaleX, solution scaleY est fonctionnelle, mais le TimePicker semble laid. La définition de l'application en mode plein écran supprime les contrôles de l'interface utilisateur à l'écran, ce qui peut ne pas être le meilleur choix pour de nombreuses applications. Envelopper le timepicker dans un scrollview n'est pas optimal non plus.

J'ai fait deux mises en page TimePicker XML, l'une avec android:timePickerMode="spinner", l'autre avec "horloge". La disposition de l'horloge est sélectionnée à l'aide du qualificatif de ressource (suffixe dans le nom du dossier) pour la hauteur d'écran disponible: "h360dp". Ainsi, l'horloge ne s'affiche que lorsque la hauteur d'écran disponible du périphérique, dans l'orientation actuelle, à l'exclusion des contrôles de l'interface utilisateur à l'écran, est supérieure à 360 pd. Pas optimal non plus, mais ça marche.

Éditer 2: L'approche décrite ci-dessous est meilleure. Testé et fonctionne sur les appareils réels à partir d'Android 4 jusqu'à 7. La boîte de dialogue TimePicker s'affiche correctement en mode paysage.

étapes sont les suivantes:

  • Inclure un élément Preference général dans les préférences fichier xml
  • Définir un écouteur de clic sur cette préférence en utilisant onPreferenceTreeClick()
  • Lorsque cette préférence est cliqué, montrent régulièrement (bibliothèque non compatible) TimePickerDialog comme décrit dans le guide 'Pickers' https://developer.android.com/guide/topics/ui/controls/pickers.html
  • Enregistrer l'heure manuellement dans le SharedPreferences

Je mets exemple de code de tous les fichiers de code impliqués ici Stackoverflow: Appcompatactivity with custom native (not compatibility) dialogpreference containing a TimePicker