Aidez-moi s'il vous plaît à réaliser la disposition suivante de deux TextViews:
match_parent ). Les deux TextViews doivent être wrap_content et pressés de leur côté.5 Réponses :
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:gravity="left" />
<TextView
android:id="@+id/right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/left"
android:gravity="right" />
</RelativeLayout>
note that left TextView may occupy whole available space if got very long text, so you may add some maxWidth param - if its not supported by TextView itself then you may wrap first one into LinearLayout (which supports maxWidth for shure). another way may be to use TableLayout and TableRow views or ConstraintLayout
Merci d'avoir répondu. J'apprécie ton effort.
envisagez de voter / accepter la réponse si cela est utile :) bonne chance!
Essayez ceci -
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/text2"
android:text="TextView1" />
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_alignParentRight="true"
android:drawableLeft="@drawable/basket"
android:text="TextView2" />
</RelativeLayout>
Vous pouvez utiliser à la fois LinearLayout ou ConstraintLayout , et le principal ici est android:maxWidth nous devons donner une vue et l'autre vue sera ajustée en fonction de cela.
Exemple de ConstraintLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Loooooooooong Texxxxxxxt!!!!!!!!!!!!!!!!!!!!!!" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="250dp"
android:text="May be this is short with maxwidth"/>
</LinearLayout>
Exemple de LinearLayout :
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/start"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@+id/end"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="Loooooooooong Texxxxxxxt!!!!!!!!!!!!" />
<TextView
android:id="@+id/end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="250dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:text="May be this is short"/>
</androidx.constraintlayout.widget.ConstraintLayout>
C'est une solution solide et j'aime ça. S'il n'y a pas d'option plus flexible, je la vérifierai comme bonne réponse.
Regarde ça
activity_main.xml
private TextView startTV, endTV;
private ConstraintLayout constraintLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
constraintLayout = findViewById(R.id.constraintLayout);
startTV = findViewById(R.id.startTextView);
endTV = findViewById(R.id.endTextView);
constraintLayout.postDelayed(new Runnable() {
@Override
public void run() {
int systemWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
int startTVWidth = startTV.getMeasuredWidth();
int endTVWidth = endTV.getMeasuredWidth();
if ((startTVWidth + endTVWidth) >= systemWidth) {
if (startTVWidth > endTVWidth) {
startTV.setMaxWidth(systemWidth - endTVWidth - 24);
startTV.setPadding(12, 12, 12, 12);
endTV.setPadding(12, 12, 12, 12);
} else if (endTVWidth > startTVWidth) {
endTV.setMaxWidth(systemWidth - startTVWidth - 24);
startTV.setPadding(12, 12, 12, 12);
endTV.setPadding(12, 12, 12, 12);
}
}
}
}, 1);
}
MainActivity.java
<?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:id="@+id/constraintLayout"
tools:context=".MainActivity"
tools:ignore="HardcodedText">
<TextView
android:id="@+id/startTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="On"
android:gravity="center"
android:textSize="32sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/endTextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/endTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_margin="8dp"
android:text="If one of the TextViews is too long"
android:textSize="20sp"
app:drawableStartCompat="@android:drawable/ic_btn_speak_now"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/startTextView"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Un peu long. Mais ça marche.
Merci d'avoir répondu! J'apprécie vraiment vos efforts. Mais je pense que cette solution est trop compliquée pour une telle tâche.
@Nikolay C'est la seule solution que je puisse trouver pour utiliser wrap_content sur les deux TextView sans découpage et aussi pour que le gros TextView repose sur un autre TextView . Je n'ai pas trouvé de solutions moins compliquées ... Merci. Bon codage :)
Avez-vous essayé la mise en page Flexbox ? On dirait qu'il couvre votre cas.
Merci! Cela semble être la manière la plus correcte de procéder. Je n'ai jamais essayé d'utiliser FlexLayout auparavant.
Utilisez une disposition linéaire avec un poids pour y parvenir.
@ShailendraMadda Malheureusement, je ne peux pas utiliser de poids car alors le bon TextView occupera toujours 50% de l'espace, malgré la longueur de son texte