Установите layout_margin, используя привязку данных - PullRequest
0 голосов
/ 03 апреля 2019

Я использую построение данных в своем приложении, и я новичок в этом. Я не могу изменить код layout_marginLeft. Я видел много примеров, но они не работают для меня. Вот мой код в модели.

@BindingAdapter("android:layout_marginLeft")
public static void setLayoutMarginLeft(View view, float marginLeft) {
    if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        p.setMargins((int) marginLeft, p.topMargin, p.rightMargin, p.bottomMargin);
        view.requestLayout();
    }
}

XML-файл

<data>
    <import type="android.view.View" />
    <variable
        name="viewModel"
        type="com.aofled.test.window.activity.sleep.SleepActivityViewModel" />
</data>

<TextView
            android:id="@+id/tv_sleep"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tap to screen....."
            android:textColor="@color/selector_inactive"
            android:textSize="48sp"
            android:layout_marginLeft="@{viewModel.layout_marginLeft}"
            />

Я не могу построить проект. Я написал:

**** / ошибка привязки данных **** msg: Не удалось найти средство доступа com.aofled.test.window.activity.sleep.SleepActivityViewModel.layout_marginLeft файл: C:! Work \ kohote_ch_android 4 \ kohotehc_android \ client \ src \ main \ res \ layout \ activity_sleep.xml loc: 26: 45 - 26:71 **** \ ошибка привязки данных ****

Что я должен изменить, чтобы это работало?

1 Ответ

0 голосов
/ 04 апреля 2019

Ну, я нашел решение для моей проблемы. Я надеюсь, что кто-то поможет.

Мой .xml

<data>
    <import type="android.view.View" />
    <variable
        name="viewModel"
        type="com.kohote.homecare.window.activity.sleep.SleepActivityViewModel" />
</data>

<TextView
            android:id="@+id/tv_sleep"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sleep_mode_text"
            android:textColor="@color/selector_inactive"
            android:textSize="48sp"
            app:layout_marginLeft="@{viewModel.marginLeft}"
            />

My SleepActivityViewModel

public ObservableField<Float> marginLeft = new ObservableField<>();


@BindingAdapter({"bind:layout_marginLeft"})
public static void setLayoutMarginLeft(TextView view, float marginLeft) {
    if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        p.setMargins((int) marginLeft, p.topMargin, p.rightMargin, p.bottomMargin);
        view.requestLayout();
    }
}

и мой Сеттер

marginLeft.set(100f, 900f);

Это рабочая версия.

...