У меня есть диалог с этим контентом:
<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 действительно короткий.
Я закончил тем, что изменил свой RelativeLayout на LinearLayout, чтобы заставить это работать. Я не делал этого изначально, потому что, когда я его пробовал, он дал мне очень высокий и тощий диалог (внутренний LinearLayout содержит ImageViews и TextViews). Но, что удивительно, изменение всех моих представлений от width = fill_parent до wrap_content заставило диалог растягиваться горизонтально, чтобы заполнить экран, чего я хотел, и высота ведет себя правильно.
после того, как вы позвонили:
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);
}
Одним из решений этого является программное получение высоты экрана и указание высоты вашего вида прокрутки вручную.
Чтобы получить размеры экрана (в пикселях):
Получить размеры экрана в пикселях
Проблема в том, что высота вашей кнопки будет отличаться от количества пикселей на каждом экране, исходя из плотности пикселей, но ваша кнопка будет установленным количеством DP.
В вашем XML установите высоту для вашей кнопки в DP.
Затем подсчитайте, сколько пикселей на вашей кнопке. Смотрите: В чем разница между "px", "dp", "dip" и "sp" на Android?
Затем вы можете использовать высоту экрана, минус высоту вашей кнопки, чтобы определить размер, который вы можете установить в параметрах макета кнопки.
LayoutParams params = findViewById(R.id.your_scroll_view).getLayoutParams();
params.height = screenHeight - buttonHeight;