2011-08-09 2 views
0

J'ai essayé de créer un NumberPicker personnalisé qui fonctionne plutôt bien dans la plupart des cas. Le seul problème est la mise en page qui est créée dynamiquement. La mise en page se compose deLinearLayout (dynamique) et problème d'orientation de l'écran

  • deux boutons ("+" en haut et "-" en bas en mode portrait)
  • une modifier

Dans le constructeur ("NumberPicker étend LinearLayout") J'ajoute les trois composants en utilisant addView() à la mise en page. En cas de visualisation de cette disposition en mode paysage, je voudrais que les boutons "+" et "-" ne soient pas en haut et en bas, mais à droite et à gauche, sinon la taille de la NumberPicker est trop grand. En utilisant l'événement onConfigurationChanged, je vérifie si l'utilisateur a changé l'orientation de l'écran et positionne l'orientation de LinearLayout à l'horizontale et à la verticale. Le problème est que les boutons "+" et "-" ne sont pas dans la bonne position. Cela devrait ressembler à ceci (par exemple en paysage):

"-" | éditer | "+"

Mais il semble de cette façon:

"+" | éditer | "-"

Comment puis-je résoudre ce problème? Je voudrais avoir les boutons dans le bon ordre. Pourrais-je résoudre le problème en utilisant des XML?

Merci.

Répondre

0

Bien qu'il existe probablement un moyen de résoudre votre problème sans XML, je pense que leur utilisation n'est pas une mauvaise idée (en utilisant, par exemple, getLayoutInflater().inflate(), qui renvoie une vue que vous pouvez convertir en un NumberPicker).

Si vous gérez les modifications de configuration manuellement (en utilisant le configurationChanges="keyboardHidden|orientation" dans votre fichier XML), vous devrez alors récupérer le fichier XML en utilisant l'extrait ci-dessus. Sinon, l'activité sera détruite à la rotation et les ressources appropriées seront récupérées automatiquement. Si vous placez votre fichier XML portrait dans le dossier layout et l'autre dans le layout-land, tout devrait s'arranger.

+0

Il fonctionne avec les XMLs et le LayoutInflater. Je vous remercie! – Dekar

0

Vous pouvez avoir deux xmls de mise en page différents, un pour le portrait et un pour le paysage. pour le paysage, vous pouvez alors mettre le bouton moins avant le bouton plus si vous utilisez une orientation linéaire linéaire

+0

Nous vous remercions de votre réponse. Mais comment puis-je "charger" le fichier XML dans ma classe NumberPicker qui étend un LinearLayout? – Dekar

+0

http://www.ctctlabs.com/index.php/blog/detail/android_dont_overlook_viewswitcher/ vous pouvez utiliser un sélecteur de vues pour permuter entre les vues –

Questions connexes