Android: ScrollView is not scrolling
Asked Answered
J

4

7

I am trying to create a layout with a header, a banner below it, and then a couple of ListView under the banner. I want the the complete screen to be scrollable except the header. Now I know that ListView does not scroll within a ScrollView so I have set the height of the ListView big enough to show all the items. The problem is that, even after these changes, I see that the ListView is scrolling independently and the complete screen is not scrollable.

`

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

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:layout_weight="0.8"
            android:background="#f2f2f2">

            <include
                android:id="@+id/mcUser"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                layout="@layout/complaint_reporters_details"
                android:layout_weight="2" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="horizontal"
                android:weightSum="9"
                android:layout_weight="2">

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"
                    android:weightSum="1"
                    android:layout_weight="3"
                    android:focusableInTouchMode="false"
                    android:paddingLeft="30dp"
                    android:paddingRight="30dp">

                    <ImageView android:id="@+id/mcShowList"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:layout_marginTop="5dp"
                        android:layout_marginBottom="5dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/list_icon"
                        android:layout_weight="0.2" />

                    <TextView android:id="@+id/mcShowList_label"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:textStyle="bold"
                        android:textSize="12sp"
                        android:textColor="#929292"
                        android:maxLines="1"
                        android:text="List"
                        android:layout_weight="0.8"
                        android:layout_marginTop="-8dp" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"
                    android:weightSum="1"
                    android:layout_weight="3"
                    android:gravity="center_vertical|center_horizontal"
                    android:paddingLeft="30dp"
                    android:paddingRight="30dp">

                    <ImageView android:id="@+id/mcShowMap"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:layout_marginTop="5dp"
                        android:layout_marginBottom="5dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/map_view"
                        android:layout_weight="0.2"/>

                    <TextView android:id="@+id/mcShowMap_label"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:textStyle="bold"
                        android:textSize="12sp"
                        android:textColor="#929292"
                        android:maxLines="1"
                        android:text="Map"
                        android:layout_weight="0.8"
                        android:layout_marginTop="-8dp" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"
                    android:weightSum="1"
                    android:layout_weight="3"
                    android:focusableInTouchMode="false"
                    android:paddingRight="30dp"
                    android:paddingLeft="30dp">

                    <ImageView android:id="@+id/mcShowAnalytics"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:layout_marginTop="5dp"
                        android:layout_marginBottom="5dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/analytics_icon"
                        android:layout_weight="0.2" />

                    <TextView android:id="@+id/mcShowAnalytics_label"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:textStyle="bold"
                        android:textSize="12sp"
                        android:textColor="#929292"
                        android:maxLines="1"
                        android:text="Analytics"
                        android:layout_weight="0.8"
                        android:layout_marginTop="-10dp" />

                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

        <RelativeLayout
            android:layout_weight="0.2"
            android:layout_width="fill_parent"
            android:layout_height="400dp">

            <FrameLayout
                android:id="@+id/mcMapContainer"
                android:layout_width="match_parent"
                android:layout_height="fill_parent"/>

            <LinearLayout
                android:id="@+id/mcAnalyticsContainer"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="fill_parent">

                <FrameLayout
                    android:id="@+id/mcChartContainer"
                    android:layout_gravity="center"
                    android:layout_width="200dp"
                    android:layout_height="200dp"/>

                <GridView
                    android:id="@+id/mcAmenityList"
                    android:layout_height="0dp"
                    android:layout_weight="7"
                    android:layout_width="match_parent"
                    android:numColumns="3"/>

            </LinearLayout>

            <LinearLayout
                android:id="@+id/mcListContainer"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:weightSum="1">

                <TextView
                    android:text="Open Complaints"
                    android:textColor="@color/red_btn_bg_color"
                    android:textSize="18dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical|center_horizontal"
                    android:padding="5dp" />

                <ListView
                    android:id="@+id/mcListOpen"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

                <TextView
                    android:text="Closed Complaints"
                    android:textColor="@color/red_btn_bg_color"
                    android:textSize="18dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical|center_horizontal"
                    android:padding="5dp" />

                <ListView
                    android:id="@+id/mcListClosed"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

            </LinearLayout>

        </RelativeLayout>

    </LinearLayout>

</ScrollView>

`

Janise answered 2/1, 2015 at 7:48 Comment(1)
Please see my answer in another question.. Adding another empty viewSutler
C
7

Change height of scroll view from match_parent to wrap_content. Because scroll view only enable scrolling if its total height is more than the height of parent view. i.e. replace

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

with this code:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true">
Chorus answered 2/1, 2015 at 9:27 Comment(4)
I made both the layout height and width to "wrap_content". Still scroll does not work.Janise
Change height of linear layouts also to wrap_content then try it.Chorus
I had done that. But just realised that the height of the RelativeLayout which has the ListView, was fixed. Changing it to "fill_parent" solved the issue.Janise
see my answer in the following link #30283080Sutler
A
2

I've used the following method several times on several apps. I use a special subclass of ListView:

package com.yourcompany.appname.views;

import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.ListView;

public class NonScrollableListView extends ListView {
    public NonScrollableListView(Context context) {
        super(context);
    }

    public NonScrollableListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NonScrollableListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

Then in your layout, instead of using 's, use something like this:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <com.yourcompany.appname.views.NonScrollableListView
        android:id="@+id/listId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

Hope this helps!

Ante answered 2/1, 2015 at 8:6 Comment(3)
Thanks Jonathan. This makes the ListView fully expanded, which is something I was doing before as well, though this is a better and clearer way of doing it. But even now, the ScrollView does not scroll for me and I can only see items which fit the screen.Janise
@vaibhav, you have also set a height of 400dp in your relative view . Should that be wrap_content so that there is something to scroll in the scroll view? In general, the views in the scroll view should wrap content vertically so that they use the extra vertical space afforded by the scrollview.Ante
That is correct. I realised that yesterday and fixed it. Thanks for helping out. Unfortunately, I dont have enough reputation points to upvote your answer.Janise
C
0

You can try this,

   listView.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        return true; 
    }
    return false;
    }
  });
Canarese answered 2/1, 2015 at 7:52 Comment(0)
F
0

put list view to another xml and include it like this below

<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">
<include layout="@layout/show_message_header" />
    <ScrollView
        android:id="@+id/myscrollview_Show_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/header"
        android:fadingEdge="none"
        android:fillViewport="false"
        android:paddingRight="0dp"
        android:scrollbarAlwaysDrawVerticalTrack="false"
        android:scrollbarSize="0dp"
        android:scrollbarStyle="insideOverlay"
        android:scrollbars="none" >
        <TableLayout
            android:id="@+id/Show_message_dynamic_table"
            android:layout_width="match_parent"
            android:layout_height="fill_parent" >
          <include layout="@layout/desinglayoutforlistviewincludehere" />
         </TableLayout>
    </ScrollView>

Feral answered 2/1, 2015 at 8:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.