I'm trying to make a help popup. Since the help tips will be different according to which screen you click the help button from, I want to put the text inside a scroll just in case. My layout looks like this:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/helpPopupTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginTop="20dp" android:layout_marginEnd="10dp" android:gravity="center" android:text="@string/help_popup_title" android:textColor="?attr/colorOnBackground" android:textSize="24sp" android:textStyle="bold" /> <ScrollView android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginStart="10dp" android:layout_marginTop="20dp" android:layout_marginEnd="10dp" android:layout_weight="1" android:fillViewport="true"> <TextView android:id="@+id/helpTips" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/help_tips" android:textSize="20sp" /> </ScrollView> <Button android:id="@+id/footerButton" style="@style/RoundedButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_marginStart="10dp" android:layout_marginTop="20dp" android:layout_marginEnd="10dp" android:layout_marginBottom="20dp" android:text="@string/footer_button_text" /> It's basically a title, the scroll, and a button. My problem is, when the popup shows up, the scroll is just as tall as the text inside of it.
This is how I build the dialog:
val dialogView = LayoutInflater.from(this).inflate(R.layout.help_popup, null) val dialogBuilder = AlertDialog.Builder(this).setView(dialogView) dialogView.findViewById<TextView>(R.id.helpPopupTitle).setText(R.string.help_popup_title) dialogView.findViewById<TextView>(R.id.helpTips).setText(R.string.help_tips) val dialog = dialogBuilder.create() dialog.setCanceledOnTouchOutside(true) dialogView.findViewById<Button>(R.id.footerButton).setOnClickListener { dialog.dismiss() } dialog.show() val displayMetrics = DisplayMetrics() if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) { val display = display display?.getRealMetrics(displayMetrics) } else { @Suppress("DEPRECATION") val display = windowManager.defaultDisplay @Suppress("DEPRECATION") display.getMetrics(displayMetrics) } val width = displayMetrics.widthPixels val height = displayMetrics.heightPixels val popupWidth = width * 0.9 val popupHeight = height * 0.85 dialog.window!!.setLayout(popupWidth.toInt(), popupHeight.toInt()) It is really messy, but so far it works since what I want is a popup that covers most of the screen but not entirely. I've looked in other threads but most just say "just put android:fillViewport="true" and the scroll will fill the parent" but it doesn't work for me, maybe I messed up something while building the popup. Any help?
EDIT: After trying the answer provided by gioravered the weight is actually working and the scroll fills the parent. The only problem is that now the layout is slightly offcentered.