2010-11-15 4 views
51

Je veux mettre un bouton à côté d'un EditText et je veux que leurs hauteurs correspondent.Comment faire pour que la hauteur d'un bouton corresponde à la hauteur d'un autre élément?

Par exemple, le construit dans le navigateur Android:

alt text

Le bouton Go est la même hauteur que le champ EditText. Je sais que je pourrais envelopper ces deux vues dans une vue de mise en page parent, et définir leurs deux hauteurs à fill_parent, et cela les ferait correspondre. Cependant, je voudrais le faire sans avoir à donner à la mise en page une taille statique. Je préférerais que l'EditText prenne la hauteur dont il a besoin en fonction de la taille de la police et que le bouton à côté de celui-ci corresponde à n'importe quelle hauteur. Est-ce possible avec une mise en page xml?

+1

Cette question doit être mis à jour pour inclure le nouveau ConstraintLayout. –

Répondre

27

Vous devrez faire le EditTextwrap_content sur sa hauteur et avoir le Button juste fill_parent. Vous devrez les avoir tous les deux enveloppés dans un parent Layout. De cette façon, ils sont associés au même parent Layout.

Essayez cela et voyez comment cela fonctionne, si cela aide à me le faire savoir. Si ce n'est pas le cas, je peux vous donner un code qui vous aidera.

+0

Merci pour l'offre d'aide, mais la réponse de Falmarri a parfaitement fonctionné, donc je suis prêt. Merci encore. – cottonBallPaws

+0

En fait, après avoir essayé de le faire sans une vue encapsuleur, je n'ai pas réussi à aligner correctement le bouton sur le côté droit du texte à cause du problème que j'ai décrit en réponse à la réponse de Falmarri. En utilisant votre méthode, j'ai été en mesure d'obtenir le bouton de taille et placé correctement, donc je vais marquer le vôtre comme la réponse. – cottonBallPaws

57

Sans doute le EditText et le Button sont à l'intérieur d'un RelativeLayout. Définissez les attributs de disposition du bouton sur alignTop et alignBottom sur EditText.

+2

Cela a fonctionné à merveille et ne nécessite pas d'emballage, merci beaucoup. – cottonBallPaws

+2

Comment est-ce que j'aurais l'EditText disposé à la gauche du bouton? J'ai essayé using layout_toLeftOf = "l'id du bouton" sur le EditText mais puisque le bouton est déclaré après le EditText dans le fichier XML, j'obtiens une erreur que l'ID du bouton n'existe pas. Je ne peux pas les inverser parce que j'ai le même problème, le bouton se réfère à l'id de l'EditText pour l'alignement comme vous l'avez décrit. Des suggestions sur la façon de faire face à cela? Merci – cottonBallPaws

15

Ce que vous voulez, c'est une disposition relative. Un exemple avec quelques commentaires est comme suit

Nous commençons par ce RelativeLayout en tant que parent. Cela peut envelopper tout le contenu. Dans ce parent nous avons mis 2 éléments, le bouton et l'editText de votre exemple.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

Nous commençons par placer l'élément Button dans le coin supérieur droit. C'est ce que le layout_alignParentRight et layout_alignParentTop sont tous. Encore une fois c'est le plus gros élément donc nous allons le laisser envelopper tout le contenu en utilisant wrap_content pour la hauteur et la largeur.

<Button 
    android:id="@+id/Button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:text="some_text" /> 

Maintenant, le deuxième élément, la editText nous voulons aligner sur le côté gauche de notre élément précédent, utilisez la référence id avec le paramètre layout_toLeftOf pour accomplir cela.

<EditText 
    android:id="@+id/EditText1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@+id/Button1" 
    android:hint="some_hint" 
    android:inputType="textCapWords" /> 

Fermez le RelativeLayout et maintenant le rendre pour voir ce que vous avez probablement vous-même déjà.

</RelativeLayout> 

enter image description here

Depuis le editText est plus petit en hauteur, il ne correspondra pas à le bouton il est placé à côté de. Solution pour cela est d'ajouter quelques paramètres de mise en page.Les magiques que vous recherchez sont layout_alignBottom et layout_alignParentTop.

android:layout_alignBottom="@+id/Button1" 
    android:layout_alignParentTop="true" 

Ajoutez ces 2 et vous obtiendrez votre mise en page correctement.

enter image description here

+0

ne fonctionnera pas pour la mise en page linéaire! –

+2

@farhan patel c'est pourquoi je commence l'explication en disant que vous avez besoin d'une mise en page relative ;-) – hcpl

Questions connexes