Ceci est mon code avec the imageview show bien. p> Maintenant, j'ai une disposition personnalisée s'étend de Framelayout, par exemple MyFramelayout. P> dans myFramelayout, je veux que la hauteur de la mise en page soit toujours la moitié de la largeur, de sorte que mon code est: p> puis l'utiliser xml: p> mais maintenant l'image interne a disparu. p> Je pense que je ne sais pas Mise à jour strong> p> par thedimasig strong> Il suffit de vérifier mon code et de mettre à jour ma question. Merci p> p> framelayout code>:
Onpeasure code> ou
ou
Onlayout code> correctement. Je suppose que j'ai besoin de redimensionner les vues des enfants aussi. Mais je ne sais pas quoi faire maintenant. P>
3 Réponses :
Je suppose dans votre ONMEASURE CODE> Méthode que vous oubliez d'appeler ONMEASURE sur toutes les vues enfants, y compris votre imageView. Vous devez aller à travers toutes vos vues de votre enfant et appeler OnMeasure sur eux quelque chose comme ceci:
Je viens de lire la source de framelayout code>, le
onpeasure code> et
onLayout code> semble assez compliqué, existe-t-il un moyen simple de faire cela?
Au lieu de cela, priorisez-le à la place de tout le corps de la méthode et de la construction () Essayez d'appeler Super.Enméasure (WidthMeasuresPec * 0,5, HightMeasuresPec) avec vos paramètres. Cette solution peut être exigée de remplacer trop d'Onlayout de cette manière
J'ai essayé widthmeasurespec * 0.5 code>, mais la taille finale semble non attendue. Je ne peux pas l'obtenir, pourriez-vous me donner un exemple de travail lorsque vous avez le temps?
Malheureusement non. Si le truc avec Super.Enmeasure, l'appel ne fonctionne pas, j'ai bien peur que vous ayez besoin de mettre en œuvre votre propre ONMEASURE et ONLAYOUT et n'oubliez pas d'enfant, bonne chance =)
Vous ne voyez aucune vue enfant parce que vous ne remplacez pas la méthode si cette mise en page Vous avez posté votre mise en page complète, mon code pourrait ne pas fonctionner. P> p> OnMeasure code> correctement. Vous pouvez laisser la classe Super classe implémenter la logique (de sorte que les vues de l'enfant seront affichées), puis réinitialisez la largeur et la hauteur calculées pour
myFramelayout code>:
Le moyen le plus simple est de changer les mesuresPec dans OnMeasure, mais d'appeler toujours Super:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = (int) (width * 0.5); heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
Je peux confirmer ça fonctionne. Sans appeler Super.Enméasure (), la vue sur l'enfant n'était pas visible!
Merci beaucoup, j'ai lu beaucoup de discussion, c'est la seule réponse valide pour rendre les enfants redimensionnés avec la mise en page des parents!
Deux suggestions: 1. Vérifiez vos méthodes
OnMeasure CODE> et
OnLayout CODE> Dans votre
MyFramelayout CODE> classe. 2. Essayez d'utiliser l'outil HierarhyViewer pour le débogage. En outre, si cela est possible montrer tout le code de votre mise en page personnalisée
@Thedimasig, je viens de mettre à jour ma question, veuillez consulter :)