Android: ScrollView 没有滚动
Android: ScrollView is not scrolling
我正在尝试创建一个带有 header 的布局,它下面有一个横幅,然后横幅下面有几个 ListView。我希望整个屏幕都可以滚动,除了 header。现在我知道 ListView 不会在 ScrollView 内滚动,所以我将 ListView 的高度设置得足够大以显示所有项目。问题是,即使进行了这些更改,我仍然看到 ListView 正在独立滚动并且整个屏幕不可滚动。
`
<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>
`
你可以试试这个,
listView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
return true;
}
return false;
}
});
我已经在多个应用程序上多次使用以下方法。
我使用 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();
}
}
然后在您的布局中,不要使用 ,而是使用如下内容:
<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>
希望对您有所帮助!
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>
将滚动视图的高度从 match_parent 更改为 wrap_content。因为滚动视图仅在其总高度大于父视图的高度时才启用滚动。即替换
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
使用此代码:
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
我正在尝试创建一个带有 header 的布局,它下面有一个横幅,然后横幅下面有几个 ListView。我希望整个屏幕都可以滚动,除了 header。现在我知道 ListView 不会在 ScrollView 内滚动,所以我将 ListView 的高度设置得足够大以显示所有项目。问题是,即使进行了这些更改,我仍然看到 ListView 正在独立滚动并且整个屏幕不可滚动。
`
<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>
`
你可以试试这个,
listView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
return true;
}
return false;
}
});
我已经在多个应用程序上多次使用以下方法。 我使用 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();
}
}
然后在您的布局中,不要使用 ,而是使用如下内容:
<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>
希望对您有所帮助!
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>
将滚动视图的高度从 match_parent 更改为 wrap_content。因为滚动视图仅在其总高度大于父视图的高度时才启用滚动。即替换
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
使用此代码:
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">