2016-12-21 2 views
1

Я пытаюсь создать собственный объект CardView с именем WeekView. WeekView расширяет CardView. У меня есть макет CardView в XML-файле. Как сделать WeekView «скопировать» макет из XML-файла?Как вы создаете пользовательский объект CardView из файла макета XML?

Проще говоря, я хочу, чтобы быть в состоянии сделать это:

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

в основной деятельности, где mainLayout является пустой линейной планировкой. Карта WeekCard должна выглядеть как карта в файле макета XML.

Вот сокращенный вариант файла XML:

<?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> 
+0

вы можете доработать? мм скажите, почему вы не хотите добавлять этот вид непосредственно к главному виду, но передавать объект? причина для этого плз? –

ответ

1

Используйте include тега в главном окне, ссылающиеся на эту точку зрения карты

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

включить макет вы хотите повторно использовать.

Чтобы получить доступ к внутреннему виду него

View includedLayout = findViewById(R.id.some_id); 
Button buttonInsideTheIncludedLayout = (Button)includedLayout.findViewById(R.id.button);