Reputation: 793
I have a ListView and it has a Header and Footer. Their layout in CardView. And Content list in which one must be background. Here is a picture which can be clearly seen: I now this is how it turns out:
And how to do:
I did so, ScrollView> first container>listView in second container > third container. But, unfortunately, at the bottom of the container 2 it was a huge empty space!
Is it possible to implement a so-in ListView? if so how, if not then how to implement?
UPDATE
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".Details.Book.BookDetails"
android:background="@color/fragment_bg">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>
<View android:layout_width="match_parent"
android:layout_height="3dp"
android:background="@drawable/toolbar_shadow"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/toolbar"
android:id="@+id/view5" />
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/scrollView6"
android:layout_below="@+id/toolbar">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/toolbar"
android:id="@+id/linearLayout16">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_top_layout"
android:paddingBottom="@dimen/leftPadding"
android:paddingLeft="@dimen/rightPadding"
android:paddingRight="@dimen/rightPadding"
android:paddingTop="@dimen/leftPadding">
<TextView
android:id="@+id/textviewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="false"
android:layout_centerVertical="true"
android:text="@string/buy_det_pass_txt"
android:textColor="@color/background_color"
android:textSize="@dimen/mainLargeSize" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/relativeLayout9"
android:paddingBottom="@dimen/leftPadding"
android:paddingLeft="@dimen/rightPadding"
android:paddingRight="@dimen/rightPadding"
android:paddingTop="@dimen/leftPadding">
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/relativeLayout9"
android:layout_marginBottom="@dimen/textMargin"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/buy_det_fullname"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:id="@+id/tvFullName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="Medium Text"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearLayout4"
android:layout_marginBottom="@dimen/textMargin"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/buy_det_gender"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:id="@+id/tvGender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="Medium Text"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearLayout3"
android:layout_marginBottom="@dimen/textMargin"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/buy_det_ticknumber"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:id="@+id/tvTickNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="Medium Text"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearLayout6"
android:layout_marginBottom="@dimen/textMargin"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/buy_det_issdate"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:id="@+id/tvIssDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="Medium Text"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
<kz.tem_tour.Primer.MainActivity.NonScrollListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_centerHorizontal="true"
android:paddingRight="@dimen/textMargin"
android:paddingLeft="@dimen/textMargin"
android:layout_below="@+id/linearLayout16" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/listView">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_top_layout"
android:paddingTop="@dimen/leftPadding"
android:paddingBottom="@dimen/leftPadding"
android:paddingLeft="@dimen/rightPadding"
android:paddingRight="@dimen/rightPadding">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buy_det_cost_txt"
android:id="@+id/tvFromTo"
android:textColor="@color/background_color"
android:textSize="@dimen/mainLargeSize"
android:layout_alignParentTop="false"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/relativeLayout9"
android:paddingRight="@dimen/rightPadding"
android:paddingLeft="@dimen/rightPadding"
android:paddingTop="@dimen/leftPadding"
android:paddingBottom="@dimen/leftPadding">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/relativeLayout9"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout4"
android:gravity="center_vertical"
android:layout_marginBottom="@dimen/textMargin" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/buy_det_fare"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:id="@+id/tvFare"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:gravity="right"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout4"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout3"
android:gravity="center_vertical"
android:layout_marginBottom="@dimen/textMargin">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/buy_det_taxes"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:id="@+id/tvTaxes"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:gravity="right"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout6"
android:gravity="center_vertical"
android:layout_marginBottom="@dimen/textMargin">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/buy_det_service_fees"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:id="@+id/tvFees"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:gravity="right"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout6"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout7"
android:gravity="center_vertical"
android:layout_marginBottom="@dimen/textMargin">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/buy_det_total_price"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:id="@+id/tvTotPrice"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:gravity="right"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout15"
android:gravity="center_vertical"
android:layout_marginBottom="@dimen/textMargin" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/buy_det_form_of_pay"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:textSize="@dimen/mainSmallSize" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:id="@+id/tvPayment"
android:layout_weight="1"
android:textColor="@color/mainGreyColor"
android:gravity="right"
android:textSize="@dimen/mainMiddleSize" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
Upvotes: 0
Views: 73
Reputation: 5534
I have solution for that.. not healthy one but it should work for you.
Rather then adding header and footer wrap all three layout inside ScrollView
.
<ScrollView ... >
<CardView ... /> <!-- this will be header -->
<CardView ...>
<yourpackagename.NonScrollListView ... /> <!-- non scrollable listview -->
</CardView>
<CardView ... /> <!-- this will footer -->
</ScrollView>
Here is the class for NonScrollListView
public class NonScrollListView extends ListView {
public NonScrollListView(Context context) {
super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
}
Upvotes: 1
Reputation: 161
Add listview in CardView and above that cardview add header in different card view and same add footer in cardview under ListView cardview. And add whole layout is scrollview. Calculate height of listview at runtime and add height to listview. Your custom look is ready.
public static void setTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
Log.w("HEIGHT" + i, String.valueOf(totalHeight));
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (mAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
Upvotes: 0