Android ScrollView - 确保它总是大于屏幕尺寸?

时间:2014-08-27 16:16:38

标签: android scrollview

我有一个滚动视图,里面有多个不同的视图。我想要的是拥有scrollview的所有元素,除了最后一个元素填满整个屏幕。然后,用户可以向下滚动以显示滚动视图中的最后一项。我不希望在任何其他情况下看到最后一项。

我的XML看起来像这样:

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="3.45"
    android:fillViewport="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
        <View 1 ... android:weight="2.25" />
        <View 2 ... android:weight="0.8" />
        <View 3 ... android:weight="0.40" /> //last item
    </LinearLayout>
</ScrollView>

目前这样做完全填满整个屏幕,但没有最后一项推迟。

1 个答案:

答案 0 :(得分:2)

根据上一篇文章(现已删除),您应该将最后一项放在LinearLayout组之外或不同的LinearLayout中。 它会像

一样
<ScrollView
    android:layout_width="match_parent"<!-- added-->
    android:layout_height="match_parent"><!-- added-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:oriention="vertical"><!-- added-->
        <LinearLayout
            android:id="@+id/visible_items"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"><!-- changed-->
            ...{items}
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            {last item}
        </LinearLayout>
    </LinearLayout>
<ScrollView>  

更新:现在你需要将linearLayout的高度扩展到填充屏幕:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
final Point point = new Point();
    try {
        display.getSize(point);
    } catch (java.lang.NoSuchMethodError ignore) { // Older device
        point.x = display.getWidth();
        point.y = display.getHeight();
    }

LinearLayout layout = (LinearLayout) findViewById(R.id.visible_items);
LayoutParams lp = layout.getLayoutParams();
lp.height = point.y;
layout.setLayoutParams(lp);  

注意:将上面的代码放在onWindowFocusChanged()活动方法