У меня карта объявлена в файле cardslib_item_card_view
:
<it.gmariotti.cardslib.library.view.CardViewNative
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
card_view:cardCornerRadius="4dp"
style="@style/native_recyclerview_card.base"
android:id="@+id/carddemo"
android:layout_width="match_parent" android:layout_height="wrap_content">
и установить как представление содержимого в методе onCreate()
:
public class CardMariotti extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cardslib_item_card_view);
//Create a Card
Card card = new Card(this);
CardViewNative cardView = (CardViewNative) this.findViewById(R.id.carddemo);
cardView.setCard(card);
card.setOnClickListener(new Card.OnCardClickListener() {
@Override
public void onClick(Card card, View view) {
Toast.makeText(CardMariotti.this, "Clickable card", Toast.LENGTH_LONG).show();
}
});
}
Теперь я хотел бы настроить его с помощью собственного макета, содержащего узкий заголовок и некоторую информацию, как показано ниже:
<RelativeLayout android:id="@+id/cardlayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="?android:selectableItemBackground"
android:clickable="true">
<!-- layout containing 3 TextView -->
</RelativeLayout>
Какова каноническая процедура для такого процесса? Я пробовал много настроек, т.е.:
- создание второго XML-файла с именем
cardslib_item_layout.xml
и ссылка на него с помощью конструктораCard
следующим образом:Card card = new Card(this, R.layout.cardslib_item_layout);
, а затем установкаsetContentView(R.layout.cardslib_item_card_view)
- Добавление макета внутри карты, а затем установка
setContentView(R.layout.cardslib_item_card_view)
.
Сюда; cardslib_item_card_view
:
<it.gmariotti.cardslib.library.view.CardViewNative
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
card_view:cardCornerRadius="4dp"
android:id="@+id/carddemo"
android:layout_width="match_parent" android:layout_height="wrap_content">
<RelativeLayout>
<!-- my layout containing a header and some TextViews -->
</RelativeLayout>
</it.gmariotti.cardslib.library.view.CardViewNative>
В обоих тестах я испытываю следующие проблемы:
- Общий результат полностью искажен
- самое главное, RelativeLayout размещается НАВЕРХУ карты, что делает невозможным любое действие с картой (например, установка
Card.OnCardClickListener
на самой карте не будет работать, так как пользователь будет щелкать RelativeLayout, а не саму карту)
попытка 1: попытка 2:
Что такое каноническая процедура?
EDIT2: ОТВЕТ
Вклад, предоставленный @Msk, отлично сработал для меня, хотя позже я обнаружил, что с некоторыми незначительными изменениями также можно получить те же результаты, используя класс
Card
исходной библиотеки карт, не прибегая к созданию нового классаDeviceCard
, расширяющегоCard
учебный класс.Я смог настроить свой макет (заголовок и остальная часть макета карты перекрываются друг с другом, как показано на скриншотах) с небольшими и тривиальными изменениями в файле
cardslib_item_layout.xml
(которые я упустил из виду раньше); в то же время я смог устранить фантомное дополнение, которое автоматически прикрепляется к каждой карте, применив ответ Мариотти к этот вопрос.