安卓RelativeLayout,隐藏视图并将位于下方的视图推上去

3
我有一个RelativeLayout,里面有一个Spinner和一些RadioButton,根据这些的选择,我需要隐藏一些视图并显示其他视图。问题是,如果我使用view.setVisibility(View.GONE)使视图消失,布局会变得混乱,视图会重叠。如果我使用view.setVisibility(View.INVISIBLE),一切都很好,但是缺少的视图会在页面上创建一个空白。我想将下面的视图推上来,以正确地扩大页面。以下是更好的解释:

enter image description here

enter image description here

到目前为止,我的代码是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_app" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:isScrollContainer="true"
        android:scrollbarAlwaysDrawVerticalTrack="true"
        android:scrollbarStyle="insideOverlay"
        android:scrollbars="vertical" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true" >

            <Spinner
                android:id="@+id/spinner1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="60dp"
                android:background="@drawable/drop_down" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/spinner1"
                android:layout_below="@+id/textView5"
                android:layout_marginTop="30dp"
                android:text="xxx"
                android:textColor="#002f44"
                android:textSize="18sp" />

            <Button
                android:id="@+id/button2"
                android:layout_width="170dp"
                android:layout_height="30dp"
                android:layout_alignBaseline="@+id/textView1"
                android:layout_alignRight="@+id/spinner1"
                android:background="@drawable/btn_calendar"
                android:textColor="#FFBF00" />

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:visibility="invisible" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="120dp"
                android:layout_height="120dp"
                android:layout_alignLeft="@+id/textView1"
                android:layout_below="@+id/textView1"
                android:layout_marginTop="20dp"
                android:scaleType="centerCrop" />

            <AutoCompleteTextView
                android:id="@+id/editText1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignRight="@+id/spinner1"
                android:layout_alignTop="@+id/imageView1"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:layout_toRightOf="@+id/imageView1"
                android:ems="6"
                android:hint="xx xx"
                android:inputType="textPersonName"
                android:maxLength="25"
                android:textColor="#002f44" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/editText1"
                android:layout_below="@+id/editText1"
                android:padding="03dp"
                android:textColor="#610B0B" />

            <Button
                android:id="@+id/button1"
                android:layout_width="120dp"
                android:layout_height="50dp"
                android:layout_alignLeft="@+id/textView2"
                android:layout_below="@+id/textView2"
                android:background="@drawable/btn_addreminder"
                android:text="xxx"
                android:textColor="#002f44"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/spinner1"
                android:layout_below="@+id/spinner1"
                android:layout_marginTop="20dp"
                android:text="xxx "
                android:textColor="#002f44"
                android:textSize="18sp" />

            <RadioGroup
                android:id="@+id/radioGroup1"
                android:layout_width="180dp"
                android:layout_height="wrap_content"
                android:layout_alignRight="@+id/spinner1"
                android:layout_alignTop="@+id/textView4"
                android:layout_marginTop="-5dp"
                android:background="@drawable/widget_style"
                android:orientation="horizontal" >

                <RadioButton
                    android:id="@+id/radio0"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:checked="true"
                    android:text="xxx"
                    android:textColor="#002f44" />

                <RadioButton
                    android:id="@+id/radio1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="25dp"
                    android:text="xxx"
                    android:textColor="#002f44" />
            </RadioGroup>

            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/spinner1"
                android:layout_below="@+id/radioGroup1"
                android:layout_marginTop="25dp"
                android:text="xxx"
                android:textColor="#002f44"
                android:textSize="18sp" />

            <AutoCompleteTextView
                android:id="@+id/autoname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/textView5"
                android:layout_alignRight="@+id/spinner1"
                android:ellipsize="end"
                android:ems="8"
                android:hint="xx xx"
                android:maxLines="1"
                android:scrollHorizontally="true"
                android:singleLine="true"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#002f44" >
            </AutoCompleteTextView>

            <Button
                android:id="@+id/button4"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_alignLeft="@+id/imageView1"
                android:layout_below="@+id/button1"
                android:layout_marginLeft="05dp"
                android:layout_marginTop="66dp"
                android:background="@drawable/btn_addreminder"
                android:text="xxx"
                android:textColor="#002f44"
                android:textStyle="bold" />

            <Button
                android:id="@+id/Button01"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:background="@drawable/btn_addreminder"
                android:text="xxx"
                android:textColor="#002f44"
                android:textStyle="bold" />

            <Button
                android:id="@+id/Button02"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_alignBaseline="@+id/button4"
                android:layout_alignBottom="@+id/button4"
                android:layout_alignRight="@+id/editText1"
                android:background="@drawable/btn_addreminder"
                android:text="xxx"
                android:textColor="#002f44"
                android:textStyle="bold" />
        </RelativeLayout>
    </ScrollView>

</RelativeLayout>
3个回答

4

您应该使用如果缺失则与父元素对齐属性。

我已经重新设计了您的布局,请尝试它。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:isScrollContainer="true"
        android:scrollbarAlwaysDrawVerticalTrack="true"
        android:scrollbarStyle="insideOverlay"
        android:scrollbars="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <Spinner
                android:id="@+id/spinner1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="60dp" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:paddingLeft="20dp"
                android:paddingRight="20dp" >

                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_below="@+id/textView5"
                    android:layout_marginTop="30dp"
                    android:text="xxx"
                    android:textColor="#002f44"
                    android:textSize="18sp" />

                <Button
                    android:id="@+id/button2"
                    android:layout_width="170dp"
                    android:layout_height="30dp"
                    android:layout_alignBaseline="@+id/textView1"
                    android:layout_alignParentRight="true"
                    android:textColor="#FFBF00" />

                <TextView
                    android:id="@+id/textView3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentTop="true"
                    android:visibility="invisible" />

                <ImageView
                    android:id="@+id/imageView1"
                    android:layout_width="120dp"
                    android:layout_height="120dp"
                    android:layout_alignLeft="@+id/textView1"
                    android:layout_below="@+id/textView1"
                    android:layout_marginTop="20dp"
                    android:scaleType="centerCrop" />

                <AutoCompleteTextView
                    android:id="@+id/editText1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_alignTop="@+id/imageView1"
                    android:layout_marginLeft="10dp"
                    android:layout_marginTop="5dp"
                    android:layout_toRightOf="@+id/imageView1"
                    android:ems="6"
                    android:hint="xx xx"
                    android:inputType="textPersonName"
                    android:maxLength="25"
                    android:textColor="#002f44" />

                <TextView
                    android:id="@+id/textView2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignLeft="@+id/editText1"
                    android:layout_below="@+id/editText1"
                    android:padding="03dp"
                    android:textColor="#610B0B" />

                <Button
                    android:id="@+id/button1"
                    android:layout_width="120dp"
                    android:layout_height="50dp"
                    android:layout_alignLeft="@+id/textView2"
                    android:layout_below="@+id/textView2"
                    android:text="xxx"
                    android:textColor="#002f44"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/textView4"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentTop="true"
                    android:layout_marginTop="20dp"
                    android:text="xxx "
                    android:textColor="#002f44"
                    android:textSize="18sp" />

                <RadioGroup
                    android:id="@+id/radioGroup1"
                    android:layout_width="180dp"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_alignTop="@+id/textView4"
                    android:layout_marginTop="-5dp"
                    android:orientation="horizontal" >

                    <RadioButton
                        android:id="@+id/radio0"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:checked="true"
                        android:text="xxx"
                        android:textColor="#002f44" />

                    <RadioButton
                        android:id="@+id/radio1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="25dp"
                        android:text="xxx"
                        android:textColor="#002f44" />
                </RadioGroup>

                <TextView
                    android:id="@+id/textView5"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_below="@+id/radioGroup1"
                    android:layout_marginTop="25dp"
                    android:text="xxx"
                    android:textColor="#002f44"
                    android:textSize="18sp" />

                <AutoCompleteTextView
                    android:id="@+id/autoname"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignBaseline="@+id/textView5"
                    android:layout_alignParentRight="true"
                    android:ellipsize="end"
                    android:ems="8"
                    android:hint="xx xx"
                    android:maxLines="1"
                    android:scrollHorizontally="true"
                    android:singleLine="true"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textColor="#002f44" >
                </AutoCompleteTextView>

                <Button
                    android:id="@+id/button4"
                    android:layout_width="100dp"
                    android:layout_height="40dp"
                    android:layout_alignLeft="@+id/imageView1"
                    android:layout_below="@+id/button1"
                    android:layout_marginLeft="05dp"
                    android:layout_marginTop="66dp"
                    android:text="xxx"
                    android:textColor="#002f44"
                    android:textStyle="bold" />

                <Button
                    android:id="@+id/Button01"
                    android:layout_width="100dp"
                    android:layout_height="40dp"
                    android:layout_alignParentBottom="true"
                    android:layout_centerHorizontal="true"
                    android:text="xxx"
                    android:textColor="#002f44"
                    android:textStyle="bold" />

                <Button
                    android:id="@+id/Button02"
                    android:layout_width="100dp"
                    android:layout_height="40dp"
                    android:layout_alignBaseline="@+id/button4"
                    android:layout_alignBottom="@+id/button4"
                    android:layout_alignRight="@+id/editText1"
                    android:text="xxx"
                    android:textColor="#002f44"
                    android:textStyle="bold" />
            </RelativeLayout>
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

谢谢你,伙计。在发布之前我曾尝试过那个属性,但它只会将视图推到与父视图对齐,这并不是期望的结果。 - User3

1
我建议在 texView4 下方创建一个高度为 1dp 、背景透明的 view,然后将 android:layout_below="@id/view" 属性设置给 textView5。以下是布局更改后的效果:
</RadioGroup> <!-- RadioGroup ends -->

<View
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_below="@id/textView4"
    android:background="@color/transparent"/>

<!-- Changed layout_below attribute value -->
<TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/spinner1"
    android:layout_below="@id/view"
    android:layout_marginTop="25dp"
    android:text="xxx"
    android:textColor="#002f44"
    android:textSize="18sp" />

以下是没有 textView4RadioGroup 的布局效果:

enter image description here


1
在ScrollView中使用LinearLayout(垂直),并创建RelativeLayout作为其子元素。将这些RelativeLayout的高度设置为wrap content,这样当您将项目的可见性设置为GONE时,其高度将收缩。
现在根据您在此处提供的图像,您可以首先有一个下拉菜单,然后是一个相对布局,其中包含您要隐藏的两个(水平)项目。然后在另一个布局中有两个(水平)项目,最后在第三个布局中有您的图像、editText和Button。
因此,如果您隐藏任何相对布局,则其他布局将适当排列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接