Android 中包含 ListView 的 ScrollView
ScrollView including ListView in Android
我想要一个包含 ListView
的 ScrollView
,这显然是不可取的,因为 ListView
有自己的滚动条。
基本上我想要一个RelativeLayout
,其中包含形成页面header的多个视图,然后是ListView
,类似于带有图像的Facebook个人资料页面然后是提要。
如果我只是将 ListView
放在 RelativeLayout
中,那么只有 ListView
区域是可滚动的,而不是整个页面。
有没有办法不将 header (RelativeLayout
) 作为第一个元素包含在 ListView
中?
实际上我自己并没有这样做,但我知道实现您的目标并使您的布局看起来更性感的诀窍。
首先摆脱那个ScrollView。
然后在你的 ListView 上放置一个监视器(监听器)来检测你的 ListView 滚动了多少,并考虑一个合理的阈值来检测 *.
现在什么是 * ?现在是您应该 "Hide" 或 "slowly fade" 您的 header 项的时候了。当用户向下滚动 ListView 并达到该阈值时,会慢慢淡出或隐藏 header。然后当用户向上滚动时再次使用阈值来决定何时让您的 header 项目可见。
据我所知,就是这个想法。也尝试检查 github 和 android-arsenal 我想应该有一个库可以简化你的工作。
试试这个代码。
<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"
android:layout_margin="10dp" >
<LinearLayout
android:id="@+id/headerLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/headerLayout" >
</ListView>
</RelativeLayout>
ListView 上好像有一个方法叫做addHeaderView。我可以使用它在顶部添加 RelativeLayout。感谢您的输入。
Use this class
public class Helper {
public static void getListViewSize(ListView myListView) {
ListAdapter myListAdapter = myListView.getAdapter();
if (myListAdapter == null) {
// do nothing return null
return;
}
//set listAdapter in loop for getting final size
int totalHeight = 0;
for (int size = 0; size < myListAdapter.getCount(); size++) {
View listItem = myListAdapter.getView(size, null, myListView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
//setting listview item in adapter
ViewGroup.LayoutParams params = myListView.getLayoutParams();
params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
myListView.setLayoutParams(params);
// print height of adapter on log
Log.i("height of listItem:", String.valueOf(totalHeight));
}
}
and in the activity class, use,
Helper.getListViewSize(ur listview name);
我想要一个包含 ListView
的 ScrollView
,这显然是不可取的,因为 ListView
有自己的滚动条。
基本上我想要一个RelativeLayout
,其中包含形成页面header的多个视图,然后是ListView
,类似于带有图像的Facebook个人资料页面然后是提要。
如果我只是将 ListView
放在 RelativeLayout
中,那么只有 ListView
区域是可滚动的,而不是整个页面。
有没有办法不将 header (RelativeLayout
) 作为第一个元素包含在 ListView
中?
实际上我自己并没有这样做,但我知道实现您的目标并使您的布局看起来更性感的诀窍。 首先摆脱那个ScrollView。 然后在你的 ListView 上放置一个监视器(监听器)来检测你的 ListView 滚动了多少,并考虑一个合理的阈值来检测 *. 现在什么是 * ?现在是您应该 "Hide" 或 "slowly fade" 您的 header 项的时候了。当用户向下滚动 ListView 并达到该阈值时,会慢慢淡出或隐藏 header。然后当用户向上滚动时再次使用阈值来决定何时让您的 header 项目可见。 据我所知,就是这个想法。也尝试检查 github 和 android-arsenal 我想应该有一个库可以简化你的工作。
试试这个代码。
<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"
android:layout_margin="10dp" >
<LinearLayout
android:id="@+id/headerLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/headerLayout" >
</ListView>
</RelativeLayout>
ListView 上好像有一个方法叫做addHeaderView。我可以使用它在顶部添加 RelativeLayout。感谢您的输入。
Use this class
public class Helper {
public static void getListViewSize(ListView myListView) {
ListAdapter myListAdapter = myListView.getAdapter();
if (myListAdapter == null) {
// do nothing return null
return;
}
//set listAdapter in loop for getting final size
int totalHeight = 0;
for (int size = 0; size < myListAdapter.getCount(); size++) {
View listItem = myListAdapter.getView(size, null, myListView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
//setting listview item in adapter
ViewGroup.LayoutParams params = myListView.getLayoutParams();
params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
myListView.setLayoutParams(params);
// print height of adapter on log
Log.i("height of listItem:", String.valueOf(totalHeight));
}
}
and in the activity class, use,
Helper.getListViewSize(ur listview name);