我有一个场景,我有两个列表视图,一个在另一个之上,我正在努力使它滚动顶部列表,直到它到达列表的底部,然后继续到第二个列表。
继承我拥有的XML,因为你可以看到它们都设置为包装内容。它会滚动,但只显示每个列表视图中的1个选项而不是所有内容。
<ScrollView android:id="@+id/scrllArea" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/bottombar" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/topbar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="{0} Issues" android:textAppearance="?android:attr/textAppearanceLarge" /> <ListView android:id="@+id/lvIssues" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="false" > </ListView> </LinearLayout> <LinearLayout android:id="@+id/topbar2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tvTitle2" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="{0} Issues" android:textAppearance="?android:attr/textAppearanceLarge" /> <ListView android:id="@+id/lvNewIssues" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:drawSelectorOnTop="false" > </ListView> </LinearLayout> </LinearLayout> </ScrollView>
答案 0 :(得分:4)
建议您不要将一个滚动组件放在另一个组件中。但是,如果您需要此布局中的ListView
,则可以解决此问题。他们不会滚动。它们将扩展到全高,以便所有项目都可见。
在名为UI(或您选择的任何其他名称)的新包中创建一个新类,并粘贴以下内容:
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ListView;
public class ExpandedListView extends ListView
{
private android.view.ViewGroup.LayoutParams params;
private int oldCount = 0;
public ExpandedListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas)
{
if (getCount() != oldCount)
{
int height = getChildAt(0).getHeight() + 1 ;
oldCount = getCount();
params = getLayoutParams();
params.height = getCount() * height;
setLayoutParams(params);
}
super.onDraw(canvas);
}
}
现在按如下方式定义ListViews
:
<com.example.UI.ExpandedListView <!--or whatever your package path name is -->
android:id="@+id/lvIssues"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false" >
</ListView>
<com.example.UI.ExpandedListView
android:id="@+id/lvNewIssues"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:drawSelectorOnTop="false" >
</ListView>
请注意,height属性设置为fill_parent。由于我们在onDraw()
的{{1}}方法中执行的限制,它不会在视觉上填充其父组件。