Définition d'une largeur maximale sur une ViewGroup
Comment puis-je régler la largeur maximale d'un ViewGroup? Je suis à l'aide d'un Theme.Dialog
activité, cependant, cela n'a l'air tellement bon quand redimensionnée à de plus grands écrans, il est aussi léger et je ne veux pas prendre tout l'écran.
J'ai essayé cette suggestion en vain. Aussi, il n'y a pas de android:maxWidth
propriété à l'instar de certains points de vue.
Est-il un moyen de limiter la racine LinearLayout de sorte qu'il n'est pas seulement (par exemple) 640 dip? Je suis prêt à changer pour un autre ViewGroup pour cela.
Des suggestions?
Vous devez vous connecter pour publier un commentaire.
Une option qui est ce que j'ai fait est d'étendre LinearLayout et remplacer le onMeasure fonction. Par exemple:
Alors vous XML serait d'utiliser la classe personnalisée:
Et la attr.xml fichier d'entrée
EDIT: C'est le code j'utilise maintenant. Ce n'est pas encore complet, mais il fonctionne dans la plupart des cas.
maxWidth
hors de la boîte, au lieu de cela, nous avons à la sous-classe 🙁xmlns:app_name="http://schemas.android.com/apk/res-auto"
de l'élément de mise en page pour corriger çaDe construction sur le dessus de l'original de la réplique par Chase (+1) je voudrais faire quelques changements (ci-après).
J'aurais la largeur maximale définie via un attribut personnalisé (xml ci-dessous le code)
J'appellerais
super.measure()
en premier et ensuite faire laMath.min(*)
comparaison. À l'aide de l'origine des réponses code on peut rencontrer des problèmes lors de l'entrants taille définie dans l'MeasureSpec
est soitLayoutParams.WRAP_CONTENT
ouLayoutParams.FILL_PARENT
. Comme ces constantes valides ont des valeurs de -2 et -1 respectivement, l'originalMath.min(*)
devient inutile car elle permettra de préserver ces vallées que sur la taille max, et dire que le mesurésWRAP_CONTENT
est plus grand que notre max taille cette case ne serait pas l'attraper. J'imagine que l'OP a été pensée exacte s'estompe seulement (pour qui il travaille beaucoup)et le xml attr
Voici un code de meilleure qualité pour les Dori réponse.
Dans la méthode
onMeasure
, Si vous appelezsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);
d'abord dans la méthode, puis tous les objets d'une largeur dans la mise en page ne sera pas changé. Parce qu'ils initialisé avant de définir la mise en page(parent) de largeur.Et voici un lien pour l'utilisation de xml attr:
http://kevindion.com/2011/01/custom-xml-attributes-for-android-widgets/
Merci pour cette question et les réponses. Votre réponse m'a beaucoup aidé, et j'espère que cela aide quelqu'un d'autre dans le futur.
MaxWidthLinearLayout
est spécifié une taille exacte... vous aurez à spécifierMATH_PARENT
et mettre la taille exacte de gestion à l'intérieur de laonMeasure(..)
. idiot, mais de travail.Maintenant
android.support.constraint.ConstraintLayout
la rend plus facile. Juste envelopper de votre point de vue (de tout type) avec ConstraintLayout, et de définir les attributs suivants à la vue:http://tools.android.com/recent/constraintlayoutbeta5isnowavailable
Ajouter un Externe de la Mise en page ou de Viewgroup couche de votre fichier de Mise en page. La hauteur et la largeur de cette Disposition sera le maximum de la hauteur/largeur.
Maintenant, votre maquette intérieure peut être réglée pour envelopper le contenu et est limitée par l'extérieur mise en page.
E. g:
Xdp
de l'espace au-moins jusqu'à ses plus commemin
etmax
widt/épaisseur maximale. Uniquement pour largeur max. La solution retenue sera de vous donner le résultat attendu 🙂Ici est une réponse simple,
Largeur/Hauteur semblent toujours être ensemble. Ce travail est, à mon avis.
Le bouton du parent est défini pour l'envelopper de contenu, de sorte que les échelles vers le bas, mais jusqu'à un maximum de 400 de large (4 boutons).