2

I'm trying to create a custom CardView object called WeekView. WeekView extends CardView. I have a CardView layout in an XML file. How do I make the WeekView "copy" the layout from the XML file?

Simply put, I want to be able to do this:

WeekView weekCard = new WeekView();
mainLayout.addView(weekCard);

in the main activity, where mainLayout is an empty linear layout. The WeekCard should look like the card in the XML layout file.

Here's a shortened version of the XML file:

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:tipbook="http://schemas.android.com/apk/res-auto"
android:id="@+id/week_card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
tipbook:contentPadding="12dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:text="Week View"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/week_view_title"
        android:textSize="12sp"
        android:textAlignment="gravity"
        android:gravity="center"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:textColor="@android:color/darker_gray"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="4dp" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tipbook:srcCompat="@drawable/ic_more_vert_black_18dp"
        android:id="@+id/week_settings_btn"
        android:background="@color/cardview_light_background"
        android:scaleX="1"
        android:scaleY="1"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:tint="@color/cardview_shadow_start_color"
        android:tintMode="src_in"
        android:layout_marginRight="4dp"
        android:layout_marginTop="4dp" />


    <LinearLayout
        android:id="@+id/week_days"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:layout_below="@id/week_settings_btn"
        android:weightSum="7"
        android:layout_marginTop="12dp" >



    </LinearLayout>

    <TextView
        android:text="Last Week"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/week_days"
        android:id="@+id/visible_week"
        android:textSize="14sp"
        android:textAlignment="gravity"
        android:gravity="center"
        android:layout_marginTop="12dp" />

    <ImageButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/week_days"
        android:layout_marginTop="12dp"
        tipbook:srcCompat="@drawable/ic_expand_more_black_18dp"
        android:id="@+id/more_less_week"
        android:scaleX="1"
        android:scaleY="1"
        android:tint="@color/common_google_signin_btn_text_light_default"
        android:tintMode="src_in"
        android:background="@color/cardview_light_background"
        android:visibility="gone"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
1
  • can you elaborate further? mm tell why you don't want to add that view directly to main view but pass an object? reason for that plz? Commented Dec 21, 2016 at 2:13

2 Answers 2

2

Use the include tag in your main view which link to that card view

<include
   android:id="@+id/some_id"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   layout="@layout/your_card_layout" />

to include the layout you want to reuse.

To access inner views of it

View includedLayout = findViewById(R.id.some_id);
Button buttonInsideTheIncludedLayout = (Button)includedLayout.findViewById(R.id.button);
Sign up to request clarification or add additional context in comments.

Comments

0

Maybe it's to late for this answer, but I'm a rookie in Android development and I think what you where looking for is the LayoutInflater.inflate() method.

The way to inflate an XML layout and return it as a View, in your case a CardView.

My code example:

LayoutInflater inflater = LayoutInflater.from(getContext());
CardView newSessionGroupCardView = (CardView) inflater.inflate(R.layout.session_group_cardview, null);

LinearLayout linearParentLayout = getView().findViewById(R.id.session_group_layout);
linearParentLayout.addView(newSessionGroupCardView);

Maybe this help someone. Further reading to Layout Inflater

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.