将我的RelativeLayout放在ScrollView中会错放布局中的所有项目

时间:2014-05-21 13:45:04

标签: android android-layout scrollview relativelayout

非常感谢你的帮助和关注。

在将RelativeLayout放入ScrollView之前,这就是我的Activity的样子:

enter image description here

我仍然需要努力,但Buttons,EditTexts和Views都在他们的位置。


现在,如果我将RelativeLayout放在ScrollView中,那么项目的所有位置都会搞砸,

这是(不受欢迎的)结果

enter image description here

请问我该怎么做?

这是我的XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgland"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MenuActivity" >
<View
    android:id="@+id/view1"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_centerInParent="true"
    android:layout_margin="20dip"
    android:background="@android:color/darker_gray" />
<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:scaleType="fitXY"
    android:src="@drawable/white_bg" />

<EditText
    android:id="@+id/bikenumber"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/getbikebutton"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="20dip"
    android:layout_marginRight="20dip"
    android:layout_marginTop="20dip"
    android:ems="10"
    android:hint="@string/hint_getbike"
    android:inputType="number"
    android:singleLine="true" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/getbikebutton"
    style="@style/OrangeButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/view1"
    android:layout_alignLeft="@+id/view1"
    android:layout_alignRight="@+id/view1"
    android:layout_marginBottom="10dip"
    android:layout_marginLeft="15dip"
    android:layout_marginRight="15dip"
    android:text="@string/menu_getbikebuttontext" />



<Button
    android:id="@+id/buttonGoToMyLoc"
    style="@style/OrangeButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/view1"
    android:layout_alignRight="@+id/view1"
    android:layout_below="@+id/view1"
    android:layout_marginBottom="10dip"
    android:layout_marginLeft="15dip"
    android:layout_marginRight="15dip"
    android:text="@string/menu_text_near_me" />

<Button
    android:id="@+id/buttonGoToThisLoc"
    style="@style/OrangeButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/view1"
    android:layout_alignRight="@+id/view1"
    android:layout_below="@+id/buttonGoToMyLoc"
    android:layout_marginLeft="15dip"
    android:layout_marginRight="15dip"
    android:layout_marginTop="10dip"
    android:text="@string/menu_text_address" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/imageView1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="25dip"
    android:text="@string/menu_title"
    android:textColor="@android:color/black"
    android:textSize="20dip"
    android:textStyle="bold" />

<EditText
    android:id="@+id/locAddress"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView1"
    android:layout_alignRight="@+id/imageView1"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="20dip"
    android:layout_marginRight="20dip"
    android:layout_marginTop="10dip"
    android:ems="10"
    android:hint="@string/menu_hint"
    android:inputType="text"
    android:singleLine="true"
    android:visibility="gone" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/locAddressCity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView1"
    android:layout_alignRight="@+id/imageView1"
    android:layout_below="@+id/locAddress"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="20dip"
    android:layout_marginRight="20dip"
    android:ems="10"
    android:hint="@string/menu_hint_city"
    android:inputType="text"
    android:singleLine="true"
    android:visibility="gone" />

</RelativeLayout>
</ScrollView>

3 个答案:

答案 0 :(得分:8)

android:fillViewport="true"添加到ScrollView代码中,如下所示:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

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

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:paddingBottom="5dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:paddingTop="5dp"
            tools:context=".MenuActivity" >

            <View
                android:id="@+id/view1"
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:layout_centerInParent="true"
                android:layout_margin="20dip"
                android:background="@android:color/darker_gray" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:scaleType="fitXY"
                android:src="@android:color/white" />

            <EditText
                android:id="@+id/bikenumber"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_above="@+id/getbikebutton"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="20dip"
                android:layout_marginRight="20dip"
                android:layout_marginTop="20dip"
                android:ems="10"
                android:hint="Get Bikes"
                android:inputType="number"
                android:singleLine="true" >

                <requestFocus />
            </EditText>

            <Button
                android:id="@+id/getbikebutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/view1"
                android:layout_alignLeft="@+id/view1"
                android:layout_alignRight="@+id/view1"
                android:layout_marginBottom="10dip"
                android:layout_marginLeft="15dip"
                android:layout_marginRight="15dip"
                android:text="FindBikes" />

            <Button
                android:id="@+id/buttonGoToMyLoc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/view1"
                android:layout_alignRight="@+id/view1"
                android:layout_below="@+id/view1"
                android:layout_marginBottom="10dip"
                android:layout_marginLeft="15dip"
                android:layout_marginRight="15dip"
                android:text="NearMe" />

            <Button
                android:id="@+id/buttonGoToThisLoc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/view1"
                android:layout_alignRight="@+id/view1"
                android:layout_below="@+id/buttonGoToMyLoc"
                android:layout_marginLeft="15dip"
                android:layout_marginRight="15dip"
                android:layout_marginTop="10dip"
                android:text="Near Address" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/imageView1"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="25dip"
                android:text="Title"
                android:textColor="@android:color/black"
                android:textSize="20dip"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/locAddress"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/imageView1"
                android:layout_alignRight="@+id/imageView1"
                android:layout_below="@+id/textView1"
                android:layout_centerHorizontal="true"
                android:textColor="@android:color/black"
                android:layout_marginLeft="20dip"
                android:layout_marginRight="20dip"
                android:layout_marginTop="10dip"
                android:ems="10"
                android:hint="Addresss"
                android:inputType="text"
                android:singleLine="true"
                android:visibility="gone" >

                <requestFocus />
            </EditText>

            <EditText
                android:id="@+id/locAddressCity"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/imageView1"
                android:layout_alignRight="@+id/imageView1"
                android:layout_below="@+id/locAddress"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="20dip"
                android:layout_marginRight="20dip"
                android:ems="10"
                android:hint="Address City"
                android:inputType="text"
                android:singleLine="true"
                android:visibility="gone" />
        </RelativeLayout>
    </LinearLayout>

</ScrollView>

ScrollView附带LinearLayout,仅适用于ScrollView内的直接子项。您可以将所有组件放在LinearLayout内。因此,如果您想要ScrollView内的任何布局,那么您应该首先将LinearLayout放在ScrollView内并将所有组件放在LinearLayout内{ {1}}。

答案 1 :(得分:0)

android:fillViewport="true"中添加ScrollView标记。我认为它可以解决你的问题。就像下面的代码一样:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

如果您想了解更多相关信息,可以查看ScrollView’s handy trick

答案 2 :(得分:0)

谢里夫是对的,但这并不总是足够的。内部布局(ScrollView的唯一子节点)永远不应该使用match_parent,因为这实际上意味着它将与ScrollView一样大但从不更大 - 整点是内部布局将大于屏幕上的布局,并且因此比ScrollView大。相对布局应该具有wrap_content的高度,或者在DP中具有固定大小,具体取决于您的需要。

将此与谢里夫的答案相结合,它应该适合你。

这在滚动和布局高度方面对我有用,但是你的相对布局有点乱 - 为什么不使用简单的线性布局而只是一个接一个地布置按钮/文本?它看起来像是一种更简单的方法来实现相同的外观。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true" >

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MenuActivity" >

   ... content ...
</RelativeLayout>