私はファイルで宣言されたカードを持っています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>
そのようなプロセスの標準的な手順は何ですか? 私は多くの調整を試みました。
- と呼ばれる 2 番目の 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
する新しいクラスの作成に頼ることなく、いくつかのマイナーな変更により、元の cardslib のクラスを使用して同じ結果を得ることも可能であることを後で発見しました。DeviceCard
Card
レイアウト (スクリーンショットに示されているように、ヘッダーとカードの残りのレイアウトが互いに重なり合っている) を調整することができましたが、ファイルにわずかな変更を加えるだけで済みました
cardslib_item_layout.xml
(以前は見落としていました)。同時に、この質問に対する Mariotti の回答を適用することで、すべてのカードに自動的に付加されるファントム パディングを排除することができました。