Je suis nouveau sur Android et lors de la création d'une mise en page de départ, je suis juste resté coincé avec l'alignement des bords inférieurs des deux textViews en une seule ligne droite sans codage en dur (comme définir des valeurs de sp fixes pour aligner les deux) . Voici mon code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/time_text_view"
android:text="2:10"
android:textStyle="bold"
android:textSize="40sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/time_text_view"
android:text="PM"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
Et voici à quoi ressemble le fichier après la compilation:
Je veux aligner 'PM' et l'heure sur la même base mais pas sur la base de la mise en page.
5 Réponses :
Vous pouvez le faire facilement avec ConstraintLayout en attribuant:
Contrainte verticale du bas de "PM" au bas de "2:10"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity">
<TextView
android:id="@+id/timeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/time_text_view"
android:text="2:10"
android:textStyle="bold"
android:textSize="40sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/timePostfixTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/time_text_view"
android:text="PM"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toEndOf="@id/timeTextView"
app:layout_constraintBottom_toBottomOf="@id/timeTextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
Vous pouvez utiliser ConstraintLayout comme:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/time_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2:10"
android:textSize="40sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/time_text_view"
android:layout_toEndOf="@+id/time_text_view"
android:text="PM"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
Ou avec RelativeLayout comme:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
tools:context=".MainActivity">
<TextView
android:id="@+id/time_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2:10"
android:textSize="40sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PM"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBaseline_toBaselineOf="@+id/time_text_view"
app:layout_constraintStart_toEndOf="@+id/time_text_view" />
</androidx.constraintlayout.widget.ConstraintLayout>
Il affiche le texte en bas de la mise en page mais n'aligne pas le texte PM avec la base du texte qui représente le temps. Je veux que ces deux soient alignés mais pas avec la base de la mise en page, plutôt en commençant par le coin supérieur gauche lui-même. Merci!
Cela fonctionne parfaitement bien. Je n'ai aucune connaissance de la disposition des contraintes jusqu'à présent, je veux donc vous demander si je peux le faire avec une disposition relative de quelque manière que ce soit?
Oui, nous pouvons également le faire avec RelativeLayout. @VaibhavDixit
Pouvez-vous me dire comment le faire alors, j'apprécierais l'aide!
Merci j'ai eu la solution!
Code mis à jour
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:gravity="bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2:10"
android:textStyle="bold"
android:textSize="40sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PM"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
Faites-moi savoir si cela fonctionne.
cela ne fonctionne pas car ce code ne modifie que la hauteur en match_parent et cela ne fera rien avec l'alignement du texte.
Désolé mon mauvais, mon code fonctionne avec une mise en page linéaire. Modifier la réponse en conséquence.
utilisez simplement la ligne ci-dessous dans votre deuxième TextView
<TextView
....
android:layout_alignBottom="@+id/time_text_view"
......../>
Enveloppez-les dans un LinerarLayout comme ci-dessous:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:orientation="horizontal"
android:gravity="bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/time_text_view"
android:text="2:10"
android:textStyle="bold"
android:textSize="40sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/time_text_view"
android:text="PM"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
Vous voulez que PM soit centré sur l'heure?
Pas de centrage mais imaginez dessiner une ligne où se trouve la base du temps, puis écrire PM au-dessus de la même ligne que la base.
Mon conseil est de démarrer votre Android avec la dernière bibliothèque. Par exemple, au lieu d'utiliser
RelativeLayoutetLinearLayout, utilisezConstraintLayout.