Эпоксидная смола: поле макета не соблюдается в эпоксидной модели, созданной с использованием пользовательского представления
Я тестировал библиотеку эпоксидной смолы и, похоже, не могу получить модель эпоксидной смолы, созданную из пользовательского метода представления, чтобы соответствовать набору полей макета. Согласно эпоксидной смоле, существует три способа создания эпоксидных моделей:
- Аннотировать пользовательские виды
- Использовать привязку данных Android
- Используйте шаблон держателя вида
Инструктивный материал Epoxy находится здесь: https://github.com/airbnb/epoxy/wiki/Epoxy-Models
Я экспериментировал с пользовательским методом представления и методом привязки данных, используя один и тот же макет, и получил разные результаты.
На приведенном ниже снимке экрана видно, что модель эпоксидной смолы с настраиваемым представлением отображает вид карты без полей - вид карты остается в конце экрана, хотя в xml показано, что я установил layout_margin равным 10dp. Похоже, что поле применяется внутри карты, но я не установил отступы.
Для эпоксидной модели представления привязки данных поле макета 10dp отображается правильно.
Я также создал пример приложения, и вы можете загрузить его здесь для тестирования: https://github.com/Winghin2517/epoxy_example1
Для эпоксидной модели с пользовательским представлением я использовал следующий файл HeaderView.java:
@ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT, fullSpan=false)
public class HeaderView extends CardView {
@BindView(R.id.hello)
TextView hello;
public HeaderView(Context context) {
super(context);
init();
}
private void init() {
inflate(getContext(), R.layout.header_view, this);
ButterKnife.bind(this);
}
@TextProp(defaultRes = R.string.app_name)
public void setTitle(CharSequence title) {
this.hello.setText(title);
}
}
Файл макета (R.layout.header_view):
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cardview"
android:layout_margin="10dp"
card_view:cardElevation="5dp"
card_view:cardBackgroundColor="@color/colorAccent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center"
android:id="@+id/hello"
android:text="Hello"/>
</android.support.v7.widget.CardView>
Затем я создал файл package-info.java для генерации модели эпоксидной смолы из представления привязки данных:
@EpoxyDataBindingLayouts(R.layout.introduction_view)
@PackageModelViewConfig(rClass = R.class)
package example.com.exampleepoxy;
import com.airbnb.epoxy.EpoxyDataBindingLayouts;
import com.airbnb.epoxy.PackageModelViewConfig;
Это файл R.layout.introduction_view:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="title" type="String" />
</data>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
card_view:cardElevation="5dp"
android:id="@+id/cardview"
card_view:cardBackgroundColor="@color/colorPrimary"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center"
android:textColor="@android:color/white"
android:id="@+id/hello"
android:text="@{title}"
/>
</android.support.v7.widget.CardView>
</layout>
Кто-нибудь знает, как я могу получить эпоксидную смолу, чтобы соблюдать маржу, установленную для пользовательских моделей эпоксидной смолы?