当内容改变时调整 scrollView 的大小
resizing scrollView when its content changes
我的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical">
<eddine.charef.mechalikh.swipedemo.NotifyingScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="-40dp"
android:fillViewport="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/image_header"
android:layout_width="match_parent"
android:layout_height="250dp"
android:src="@drawable/stethoscope"
android:scaleType="centerCrop" />
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/view"
android:background="@drawable/gradient"/>
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/view2"
android:layout_above="@+id/linearLay"
android:background="@drawable/gradient2"
android:visibility="gone" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="-10dp"
android:layout_below="@+id/image_header"
android:id="@+id/linearLay"
android:animateLayoutChanges="true"
android:background="#ffffff"
android:layout_alignTop="@+id/editPrenom">
<Space
android:layout_width="fill_parent"
android:layout_height="22dp"
android:id="@+id/space_spinner"
android:visibility="gone" />
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:visibility="gone"
android:gravity="center" />
</LinearLayout>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView5"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearLay"
android:visibility="visible" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/bienvenue"
android:id="@+id/textView20"
android:textColor="#000"
android:layout_centerHorizontal="true"
android:layout_below="@+id/view"
android:visibility="visible"
android:layout_marginTop="20dp"
android:gravity="left"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView21"
android:textColor="#000"
android:layout_below="@id/textView20"
android:layout_centerHorizontal="true"
android:visibility="visible"
android:gravity="left"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView5"
android:layout_below="@+id/linearLay"
android:src="@drawable/shadow_divider"
android:layout_marginTop="-3dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:adjustViewBounds="true"
android:src="@drawable/param"
android:onClick="params_click"
android:visibility="visible"
android:layout_above="@+id/linearLay"
android:layout_alignParentLeft="true"
android:layout_marginLeft="15dp"
android:layout_marginBottom="-25dp"
android:scaleType="center" />
</RelativeLayout>
</eddine.charef.mechalikh.swipedemo.NotifyingScrollView>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image_scroll_up_2"
android:adjustViewBounds="true"
android:src="@drawable/scroll_up"
android:onClick="scroll_up"
android:visibility="invisible"
android:layout_above="@+id/space"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="15dp" />
<Space
android:layout_width="fill_parent"
android:layout_height="15dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/space" />
</RelativeLayout>
在运行时 scrollView
内的 listView
将被更新...
当用户点击 "date" 时,它显示一切正常(没问题)
当他单击 "followed" 时,即使 listview
为空并且滚动视图正常(没问题,无法滚动,因为列表为空)
but when selecting "messages" , when the list is empty or just few items ...the scroll view can scroll (i mean a lot of space see the picture)
这张图片中间的白色圆盘是设置中开发者选项的触点,它不是我布局的一部分
您可以在图二中看到列表结束的位置(listView 的背景与 scrollView 的背景不同)
那么为什么 scrollView 不会调整大小?
注意:我使用这个函数来调整listView的大小,所以它会显示在scrollView中
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
if (listItem instanceof ViewGroup) {
listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
我在项目发生变化的任何地方都调用它。
我不明白为什么要将 scollview 放在 listview 中,您是否尝试过执行视差或玩工具栏?
要玩视差或工具栏,使用 RecyclerView 更简单。
您可以使用 ObservableRecyclerView 提供大量示例:
我的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical">
<eddine.charef.mechalikh.swipedemo.NotifyingScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="-40dp"
android:fillViewport="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/image_header"
android:layout_width="match_parent"
android:layout_height="250dp"
android:src="@drawable/stethoscope"
android:scaleType="centerCrop" />
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/view"
android:background="@drawable/gradient"/>
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/view2"
android:layout_above="@+id/linearLay"
android:background="@drawable/gradient2"
android:visibility="gone" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="-10dp"
android:layout_below="@+id/image_header"
android:id="@+id/linearLay"
android:animateLayoutChanges="true"
android:background="#ffffff"
android:layout_alignTop="@+id/editPrenom">
<Space
android:layout_width="fill_parent"
android:layout_height="22dp"
android:id="@+id/space_spinner"
android:visibility="gone" />
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:visibility="gone"
android:gravity="center" />
</LinearLayout>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView5"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearLay"
android:visibility="visible" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/bienvenue"
android:id="@+id/textView20"
android:textColor="#000"
android:layout_centerHorizontal="true"
android:layout_below="@+id/view"
android:visibility="visible"
android:layout_marginTop="20dp"
android:gravity="left"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView21"
android:textColor="#000"
android:layout_below="@id/textView20"
android:layout_centerHorizontal="true"
android:visibility="visible"
android:gravity="left"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView5"
android:layout_below="@+id/linearLay"
android:src="@drawable/shadow_divider"
android:layout_marginTop="-3dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:adjustViewBounds="true"
android:src="@drawable/param"
android:onClick="params_click"
android:visibility="visible"
android:layout_above="@+id/linearLay"
android:layout_alignParentLeft="true"
android:layout_marginLeft="15dp"
android:layout_marginBottom="-25dp"
android:scaleType="center" />
</RelativeLayout>
</eddine.charef.mechalikh.swipedemo.NotifyingScrollView>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image_scroll_up_2"
android:adjustViewBounds="true"
android:src="@drawable/scroll_up"
android:onClick="scroll_up"
android:visibility="invisible"
android:layout_above="@+id/space"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="15dp" />
<Space
android:layout_width="fill_parent"
android:layout_height="15dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/space" />
</RelativeLayout>
在运行时 scrollView
内的 listView
将被更新...
当用户点击 "date" 时,它显示一切正常(没问题)
当他单击 "followed" 时,即使 listview
为空并且滚动视图正常(没问题,无法滚动,因为列表为空)
but when selecting "messages" , when the list is empty or just few items ...the scroll view can scroll (i mean a lot of space see the picture)
这张图片中间的白色圆盘是设置中开发者选项的触点,它不是我布局的一部分
您可以在图二中看到列表结束的位置(listView 的背景与 scrollView 的背景不同)
那么为什么 scrollView 不会调整大小?
注意:我使用这个函数来调整listView的大小,所以它会显示在scrollView中
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
if (listItem instanceof ViewGroup) {
listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
我在项目发生变化的任何地方都调用它。
我不明白为什么要将 scollview 放在 listview 中,您是否尝试过执行视差或玩工具栏?
要玩视差或工具栏,使用 RecyclerView 更简单。 您可以使用 ObservableRecyclerView 提供大量示例: