【问题标题】:List View inside a Scroll View滚动视图中的列表视图
【发布时间】:2012-03-21 12:01:20
【问题描述】:
我必须实现下面的屏幕。它在 480*800 像素的屏幕上看起来非常好。在低分辨率屏幕上,由于屏幕尺寸不足,结果滚动显示了非常小的空间供用户滚动浏览结果。
实现它的最佳方式是什么?
【问题讨论】:
-
不要将Listview 放入Scrollview。这显然会造成灾难......见this
-
标签:
android
listview
scrollview
【解决方案1】:
我总是发现尝试将滚动的内容放入其他滚动的内容是一场噩梦,所以我可能会将您的视图顶部(结果班加罗尔到迈索尔日期)放在 ListView 标题中,这样它就会滚出屏幕
listView.addHeaderView(listViewHeader);
【解决方案2】:
他们是对的。您不应该将列表视图放入滚动视图。代替它试试这个:
<ScrollView android:layout_width="fill_parent" android:scrollbars="vertical"
android:layout_height="wrap_content" android:scrollbarStyle="insideOverlay">
<LinearLayout
android:id="@+id/itemContainer"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<!-- YOUR ELEMENTS WILL BE PLACED HERE -->
</LinearLayout>
</ScrollView>
然后你可以从代码中添加项目:
private LinearLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YOUR_XML);
container = (LinearLayout)findViewById(R.id.itemContainer);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
/*CREATE YOUR ITEM*/
/*AND PLACE IT INTO CONTAINER*/
container.addView(YOUR_ITEM, layoutParams);
}
【解决方案3】:
将您以红色边框显示的部分放在具有自定义列表项的 ListView 中。我猜你真的不需要滚动视图。只需将排序和过滤按钮设置为父底部。以及按钮和列表项上方部分之间的列表视图。祝你好运。
【解决方案5】:
您可以将 ListView 放在 ScrollView 中。只需扩展 ListView 以覆盖 onTouchEvent 方法。像这样
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class ChildScrollView extends android.widget.ListView {
private int parent_id;
public ChildListView(Context context) {
super(context);
}
public ChildListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ChildListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent event){
requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
}
}