No Name
No Name

Reputation: 793

ListView Background

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:

enter image description here

And how to do:

enter image description here

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

Answers (2)

V-rund Puro-hit
V-rund Puro-hit

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

YasirSE
YasirSE

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

Related Questions