Question

J'ai une situation où je soulève un sélecteur de couleur. Si cela se fait en mode portrait tout va bien. Mais si je le fais en mode paysage (la boîte de dialogue ne correspond pas à l'écran), il semble exploser en essayant de gonfler la mise en page.

Y at-il une façon particulière de le faire en mode paysage où la vue ne correspond pas tout à fait à l'écran?

Les différences que je dois prendre en compte d'autres que l'écran immobilier?

Était-ce utile?

La solution

Craiga,

Après avoir lu vos commentaires, il semble qu'il y ait un malentendu sur la façon dont les largeurs et hauteurs différentes sont générées en XML. Ceci est une idée fausse très répandue au début. Donc, la chose à comprendre ici est que la largeur des objets divers, tout en dynamique, imposent des comportements différents sur vos objets.

layout_width / layout_height généralement

Les paramètres de largeur et de hauteur ne touchent pas le réelle largeur et la hauteur de l'objet. Ils affectent la largeur de l'écran et la hauteur. Cela signifie que vous pouvez définir la largeur et la hauteur à plus petit que le contenu, et le contenu sera toujours accessible lors du défilement, si elles sont plus grandes que le contenant.

Depuis plusieurs vues enfants prennent leurs repères des vues parent, cela peut entraîner un comportement comme vous voyez ci-dessus. L'astuce est ici d'abord de comprendre ce qui se passe, et compenser le comportement du système.

match_parent / fill_parent

D'ordinaire, cela signifie que la vue actuelle obtenir sa taille du parent. Si la vue est une vue de haut niveau, le comportement change légèrement. Si cela se trouve être le niveau supérieur Vue d'une boîte de dialogue, alors il sera la taille de l'écran ou la taille du contenu (selon le plus petit). Si la vue est la vue d'une activité de niveau supérieur, les résultats sont les mêmes, mais ils voir différent. Autrement dit, il aura la pleine opacité de l'activité et de fond, mais la taille de la vue est seulement du contenu ou de la taille de l'écran est plus petit (selon). Les tailles des enfants ne sont pas affectés à moins que leur largeur / hauteur est basée sur celle de cette vue.

wrap_content

Dans ce cas, la hauteur d'affichage est basé sur les hauteurs d'affichage de tous les enfants immédiats. Cette cascade de comportement vers le bas aux descendants les plus « jeunes » jusqu'à ce que la hiérarchie des usages autre chose que wrap_content.

Votre question (comme il semble en ce moment)

Votre vue de dessus du niveau des utilisations wrap_content, de sorte que la taille d'affichage sera basé sur toutes les tailles d'affichage des enfants. Dans ce cas, il pourrait être préférable d'utiliser match_parent' orfill_parent` (dépend de votre API) pour votre niveau supérieur Afficher uniquement. Cela permettra au moins obtenir la boîte de dialogue soit la taille appropriée, sinon le contenu. Pour les contrôles dont la taille est basée sur la vue de niveau supérieur, ils entreront en ligne. Ceux qui ne sont pas devront être ajustées manuellement.

Maintenant, la décision que vous devez faire ici est mise en œuvre. Avez-vous besoin d'ajuster les tailles pour tous les écrans, ou tout simplement le paysage. Si vos modifications ont aucun effet sur l'affichage du portrait, puis un fichier devrait être bon. Sinon, vous voulez un fichier de mise en page pour le portrait (l'actuel), puis un un ajustement pour le mode paysage.

Si vous utilisez deux fichiers, vous aurez un dossier nommé layout_port pour celui en cours à stocker. Vous ajouterez un dossier nommé layout_land pour celui ajusté. Ils seront du même nom, situé dans les dossiers séparés.

Hope this helps,

FuzzicalLogic

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top