ScrollView в RelativeLayout, заполняющий весь диалог вертикально, отталкивая другие представления

1

У меня есть диалог с этим контентом:

<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 действительно короткий.

Теги:
android-layout

3 ответа

0
Лучший ответ

Я закончил тем, что изменил свой RelativeLayout на LinearLayout, чтобы заставить это работать. Я не делал этого изначально, потому что, когда я его пробовал, он дал мне очень высокий и тощий диалог (внутренний LinearLayout содержит ImageViews и TextViews). Но, что удивительно, изменение всех моих представлений от width = fill_parent до wrap_content заставило диалог растягиваться горизонтально, чтобы заполнить экран, чего я хотел, и высота ведет себя правильно.

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);
}
0

Одним из решений этого является программное получение высоты экрана и указание высоты вашего вида прокрутки вручную.

Чтобы получить размеры экрана (в пикселях):

Получить размеры экрана в пикселях

Проблема в том, что высота вашей кнопки будет отличаться от количества пикселей на каждом экране, исходя из плотности пикселей, но ваша кнопка будет установленным количеством DP.

В вашем XML установите высоту для вашей кнопки в DP.

Затем подсчитайте, сколько пикселей на вашей кнопке. Смотрите: В чем разница между "px", "dp", "dip" и "sp" на Android?

Затем вы можете использовать высоту экрана, минус высоту вашей кнопки, чтобы определить размер, который вы можете установить в параметрах макета кнопки.

LayoutParams params = findViewById(R.id.your_scroll_view).getLayoutParams();
params.height = screenHeight - buttonHeight;
  • 0
    Я не думаю, что это уменьшит размер диалогового окна, чтобы оно соответствовало только содержанию, если бы все они могли уместиться в пределах размера экрана.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню