【问题标题】:How to set layout_gravity with databinding如何使用数据绑定设置 layout_gravity
【发布时间】:2018-04-11 10:27:07
【问题描述】:

我正在尝试使用数据绑定将 layout_gravity 设置为 LinearLayout。
这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="android.view.Gravity" />

        <variable
            name="viewModel"
            type="com.example.viewModel.MessageViewModel" />
    </data>

    <LinearLayout
        android:id="@+id/messageAdapter_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="@{viewModel.isReceived ? Gravity.START : Gravity.END}"
            android:orientation="vertical"
            app:setBackground="@{viewModel.isReceived}">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{viewModel.content}"
                android:textColor="@color/primaryTextColorInv" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:textAppearance="?android:textAppearanceSmall"
                android:textColor="@color/secondaryTextColorInv"
                android:textStyle="italic" />
        </LinearLayout>
    </LinearLayout>
</layout>

viewModel.isReceivedtrue 时,嵌套的LinearLayout 应与START 对齐,当viewModel.isReceivedfalse 时应与END 对齐,但出现此错误:

Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:layout_gravity' with parameter type int on android.widget.LinearLayout.

是否可以在不使用@BindingAdapter 的情况下执行此操作?

【问题讨论】:

标签: android


【解决方案1】:

我找到了将gravity 设置为根LinearLayout 而不是将layout_grarvity 设置为嵌套的解决方案:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="android.view.Gravity" />

        <variable
            name="viewModel"
            type="com.example.viewModel.MessageViewModel" />
    </data>

    <LinearLayout
        android:id="@+id/messageAdapter_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="@{viewModel.isReceived ? Gravity.START : Gravity.END}"
        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:setBackground="@{viewModel.isReceived}"
            app:setMargin="@{viewModel.isReceived}">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{viewModel.content}"
                android:textColor="@color/primaryTextColorInv" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:textAppearance="?android:textAppearanceSmall"
                android:textColor="@color/secondaryTextColorInv"
                android:textStyle="italic" />
        </LinearLayout>
    </LinearLayout>
</layout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多