1
votes

layout_weight ne fonctionne pas lors de l'utilisation de texte de liaison de données

Tout d'abord, désolé pour mon pauvre anglais
J'ai une vue de recyclage avec une mise en page XML comme celle-ci

<layout 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">

<data>

    <variable
        name="township"
        type="com.test.feature.Area" />

</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:orientation="horizontal"
    android:paddingTop="@dimen/_10sdp"
    android:paddingBottom="@dimen/_10sdp">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@{township.name}"
        android:textColor="@color/agent_list_gray_1"
        android:textSize="@dimen/_15ssp" />

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/btnRadio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"/>
</LinearLayout>

J'ai défini le texte sur la vue de texte dans la classe Adapter, et c'est ce que je veux ce que je veux

Mais si j'utilise la liaison de données avec ceci ligne à la place

android: text = "@ {township.name}"

J'ai ceci layout_weight est incorrect

Quelqu'un sait-il ce qui ne va pas avec mon code?

Il existe d'autres moyens d'archiver ce type d'interface utilisateur, mais je veux vraiment savoir pourquoi cela ne fonctionnera pas


1 commentaires

Avez-vous résolu ce problème s'il vous plaît?


3 Réponses :


0
votes

N'avez-vous pas pu utiliser RelativeLayout et définir Textview sur parentLeft et EditTextview sur parentRight pour l'espacement?


1 commentaires

cela fonctionnera probablement, mais je veux simplement savoir pourquoi layout_weight ne fonctionne pas avec la liaison de données



0
votes

C'est bizarre! parce que j'ai implémenté votre code et cela a fonctionné. Essayez peut-être de l'encapsuler dans une vue parent comme ci-dessous (je l'ai fait de cette façon):

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/backgroundOrange"
        android:orientation="horizontal"
        android:paddingTop="@dimen/_10sdp"
        android:paddingBottom="@dimen/_10sdp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@{township.name}"
            android:textColor="@color/textPrimary"
            android:textSize="15dp"/>

        <android.support.v7.widget.AppCompatRadioButton
            android:id="@+id/btnRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0"/>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Faites-moi savoir si cela a fonctionné.


2 commentaires

Je l'ai enveloppé avec constraintLayout comme ci-dessus et cela ne fonctionne toujours pas pour moi. Utilisez-vous la liaison de données pour lier le texte?


@ user2558303 Ouais! J'ai utilisé un ObservableField pour lier les données à afficher. Peut-être que le fait que vous l'utilisiez sur une liste est à l'origine du problème.



0
votes

La solution est simple.

Lorsque vous gonflez votre mise en page si votre mise en page se trouve dans une autre mise en page, passez la mise en page de conteneur en tant que parent dans la méthode gonflée.

Si vous ne le faites pas , tous les attributs commençant par layout ne fonctionneront pas.

Votre code de gonflage devrait ressembler à ceci.

binding = FragmentTestBinding.inflate(layoutInflator,parent,false)


0 commentaires