底部有一个带有滚动视图和持久按钮的对话框



我在为对话框创建布局时遇到问题,我想显示一个带有滚动视图的对话框,但按钮始终显示在底部,但是当滚动视图太大时,它会按下屏幕底部的按钮。

如果我将父级底部的按钮对齐为 true,我可以获得所需的效果,但如果滚动视图中的内容很少,就会有一个带有大量空白空间的大对话框。

这是我目前拥有的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
    <ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
        <TextView
            android:id="@+id/staCalCompany"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="30dp"
            android:text="Company Name"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ff2525"
            android:textSize="25sp" />
        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
            <TextView
                android:id="@+id/staCalStart"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:text="Start:"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#ff2525" />
            <TextView
                android:id="@+id/staCalStartDisp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="Start Time"
                android:textAppearance="?android:attr/textAppearanceMedium" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp" >
            <TextView
                android:id="@+id/staCalEnd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:text="End:"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#ff2525" />
            <TextView
                android:id="@+id/staCalEndDisp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="End Time"
                android:textAppearance="?android:attr/textAppearanceMedium" />
        </LinearLayout>
        <TextView
            android:id="@+id/staCalSubDisp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="15dp"
            android:text="Name"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ff2525" />
        <TextView
            android:id="@+id/staCalDesc"
            android:layout_width="285dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:layout_marginLeft="15dp"
            android:text="Description"
            android:textAppearance="?android:attr/textAppearanceMedium" />
        </LinearLayout>
        </ScrollView>
<RelativeLayout
            android:id="@+id/linearLayout3"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_gravity="bottom|center_horizontal" 
            android:gravity="center_horizontal" 
            android:layout_below="@+id/scrollView1">
            <ImageButton
                android:id="@+id/calIconSync"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_marginLeft="20dp"
                android:background="@drawable/calendar_plus" />
            <ImageButton
                android:id="@+id/btnStaCalClose"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_alignParentRight="true"
                android:layout_marginRight="20dp"
                android:background="@drawable/closepopup" />
        </RelativeLayout>

试图让它在横向和纵向模式下正确显示,但当一个工作时,另一个则不工作。

关于如何做到这一点的任何建议?

在这些情况下,我只是在下面创建一些其他不可见的虚拟按钮,并以正确的方式对齐它们,以使我的"真实"按钮正确定位。

如果虚拟按钮被推离屏幕,那很好,真正的按钮在它们上方。如果屏幕上有少量内容,则虚拟按钮位于底部,"真实"按钮位于中间的某个位置。

根据需要制作宽度="1dp"和高度的"不可见"按钮。但是让它们在 ANdroid 意义上可见

编辑:您可以创建一个相对视图,将其底部与列表视图的底部对齐,并为其指定最大高度。将按钮在此相对视图下方对齐。当列表视图较小时,您的按钮将位于其正下方,如果列表视图很长,则相对视图超过最大高度并确保它仍在屏幕上,因此您的按钮将位于最大高度的正下方。确保相对视图的 maxHeight 在屏幕底部为按钮留出足够的空间。

要调整 maxHeight,以便为任何屏幕尺寸上的按钮留出足够的空间,您可以使用它来获取设备的屏幕尺寸并根据屏幕高度调整 maxHight:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenHheight = size.y;

希望这对您也有帮助...

最新更新