RelativeLayout中的ScrollView垂直填充整个对话框,推送其他视图

时间:2012-06-25 00:20:22

标签: android android-layout

我有一个包含此内容的对话框:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="25dp" >
        <LinearLayout
           ...
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/closebtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/scrollview"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

我希望对话框垂直调整大小以适应LinearLayout的尽可能多的内容。但是,我发现,如果LinearLayout的内容太高,ScrollView会填充对话框,关闭按钮会被推到底部并且不可见。

我尝试过的一件事是使Button layout_alignParentBottom =“true”并使ScrollView layout_above =“@ + id / closebtn”,但随后对话框始终拉伸以垂直填充整个屏幕,即使其内容为LinearLayout非常简短。

3 个答案:

答案 0 :(得分:0)

对此的一个解决方案是以编程方式获取屏幕高度并手动指定滚动视图的高度。

获取屏幕尺寸(以像素为单位):

Get screen dimensions in pixels

问题是,根据像素密度,按钮的高度在每个屏幕上将是不同的像素数,但您的按钮将是一定量的DP。

在XML中,为DP中的按钮设置高度。

然后计算按钮的高度。请参阅:What is the difference between "px", "dp", "dip" and "sp" on Android?

然后,您可以使用屏幕的高度减去按钮的高度来确定您可以在按钮的布局参数中设置的大小。

LayoutParams params = findViewById(R.id.your_scroll_view).getLayoutParams();
params.height = screenHeight - buttonHeight;

答案 1 :(得分:0)

我最终将RelativeLayout更改为LinearLayout以使其正常工作。我最初没有这样做,因为当我尝试它时,它给了我一个非常高而瘦的对话框(内部LinearLayout包含ImageViews和TextViews)。但是,令人惊讶的是,将我的所有视图从width = fill_parent更改为wrap_content会导致对话框水平拉伸以填充屏幕,这正是我想要的,并且高度表现正确。

答案 2 :(得分:0)

打电话后

AlertDialog dialog = builder.show();    

然后致电:

fixScrollViewHeight(scrollView);

//

private void fixScrollViewHeight(ScrollView scrollView) {
    int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
    LayoutParams lp = scrollView.getLayoutParams();
    lp.height = screenHeight / 3;
    scrollView.setLayoutParams(lp);
}