简体   繁体   中英

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:

在此处输入图片说明

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>

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();
    }
}

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();

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM