Android可滚动活动布局

5

我正在尝试使我的活动屏幕滚动,其中有一个表格需要填写,但不幸的是,当我尝试时它会导致应用程序崩溃。以下是该活动的xml代码:

<RelativeLayout 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:background="@color/background"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:textDirection="anyRtl"
    tools:context=".AddDiscountActivity" >

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="19dp"
        android:text="@string/discountLocationLabel"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/shopLocation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView4"
        android:layout_alignBottom="@+id/textView4"
        android:layout_alignRight="@+id/shopCity"
        android:ems="10"
        android:inputType="text" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView5"
        android:layout_below="@+id/shopDiscount"
        android:layout_marginTop="21dp"
        android:text="@string/discountDurationLabel"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/shopDiscountDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView6"
        android:layout_alignLeft="@+id/shopDiscount"
        android:ems="10"
        android:inputType="text" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/shopDiscount"
        android:layout_alignParentRight="true"
        android:text="@string/discountRateLabel"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textStyle="bold" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView6"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="18dp"
        android:background="@drawable/roundbutton"
        android:text="@string/discountPublishButtonLabel"
        android:textColor="@color/white"
        android:onClick="SubmitData"
        android:width="250dp" />

    <EditText
        android:id="@+id/shopCity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView4"
        android:layout_alignRight="@+id/shopName"
        android:ems="10"
        android:inputType="text" >


    </EditText>

    <EditText
        android:id="@+id/shopDiscount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/shopLocation"
        android:layout_below="@+id/shopLocation"
        android:layout_marginTop="14dp"
        android:ems="10"
        android:inputType="number" />

    <EditText
        android:id="@+id/shopName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="14dp"
        android:ems="10"
        android:inputType="text"> 
         <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/categoriesSpinner"
        android:layout_alignRight="@+id/textView2"
        android:text="@string/discountCategoryLabel"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textStyle="bold" />

    <Spinner
        android:id="@+id/categoriesSpinner"
        android:layout_width="160dp"
        android:layout_height="wrap_content"
        android:layout_above="@+id/shopName"
        android:layout_alignLeft="@+id/button1"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/textView2"
        android:layout_marginTop="206dp"
        android:text="@string/discountCityLabel"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/shopCity"
        android:layout_alignLeft="@+id/textView5"
        android:layout_marginBottom="18dp"
        android:text="@string/discountShopLabel"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/textView1"
        android:layout_marginTop="14dp"
        android:gravity="right"
        android:text="@string/addDiscountMsg"
        android:textAlignment="viewEnd"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white"
        android:textDirection="anyRtl" />

</RelativeLayout>

在定义RelativeLayout之后、关闭RelativeLayout之前,如果我尝试添加以下内容,当我运行它时应用程序会立即崩溃。
    <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
             >

            ...........
</ScrollView>

如何使其可滚动?

请问您能否发布完整的XML文件? - Wenhui
这是针对该活动的完整 XML 文件,我的朋友。 - sys_debug
好的,</RelativeLayout> 的闭合标签在哪里? - Wenhui
1
请向下滚动,查看已发布代码底部的翻译内容。 - sys_debug
3个回答

13

你的应用程序崩溃是因为ScrollView只能包含一个直接子视图。

一个可以被用户滚动的视图层次结构的布局容器,允许它比物理显示更大。ScrollView是一个FrameLayout,这意味着你应该将一个包含整个内容可滚动的子视图放在其中;这个子视图本身可能是具有复杂对象层次结构的布局管理器。经常使用的子视图是LinearLayout,它是垂直方向的,呈现出一个顶部项目的垂直数组,用户可以通过滚动浏览。

查看http://developer.android.com/reference/android/widget/ScrollView.html了解更多信息。

要解决你的xml问题:

<RelativeLayout 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:background="@color/background"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:textDirection="anyRtl"
    tools:context=".AddDiscountActivity" >

    <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

        <LinearLayout
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignRight="@+id/textView3"
                android:layout_below="@+id/textView3"
                android:layout_marginTop="19dp"
                android:text="@string/discountLocationLabel"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/shopLocation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/textView4"
                android:layout_alignBottom="@+id/textView4"
                android:layout_alignRight="@+id/shopCity"
                android:ems="10"
                android:inputType="text" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignRight="@+id/textView5"
                android:layout_below="@+id/shopDiscount"
                android:layout_marginTop="21dp"
                android:text="@string/discountDurationLabel"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/shopDiscountDuration"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/textView6"
                android:layout_alignLeft="@+id/shopDiscount"
                android:ems="10"
                android:inputType="text" />

            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/shopDiscount"
                android:layout_alignParentRight="true"
                android:text="@string/discountRateLabel"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView6"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="18dp"
                android:background="@drawable/roundbutton"
                android:text="@string/discountPublishButtonLabel"
                android:textColor="@color/white"
                android:onClick="SubmitData"
                android:width="250dp" />

            <EditText
                android:id="@+id/shopCity"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/textView4"
                android:layout_alignRight="@+id/shopName"
                android:ems="10"
                android:inputType="text" />

            <EditText
                android:id="@+id/shopDiscount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/shopLocation"
                android:layout_below="@+id/shopLocation"
                android:layout_marginTop="14dp"
                android:ems="10"
                android:inputType="number" />

            <EditText
                android:id="@+id/shopName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/textView2"
                android:layout_alignBottom="@+id/textView2"
                android:layout_alignParentLeft="true"
                android:layout_marginLeft="14dp"
                android:ems="10"
                android:inputType="text"> 
                <requestFocus />
            </EditText>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/categoriesSpinner"
                android:layout_alignRight="@+id/textView2"
                android:text="@string/discountCategoryLabel"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <Spinner
                android:id="@+id/categoriesSpinner"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:layout_above="@+id/shopName"
                android:layout_alignLeft="@+id/button1"
                android:layout_marginBottom="16dp" />

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignRight="@+id/textView2"
                android:layout_marginTop="206dp"
                android:text="@string/discountCityLabel"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/shopCity"
                android:layout_alignLeft="@+id/textView5"
                android:layout_marginBottom="18dp"
                android:text="@string/discountShopLabel"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignRight="@+id/textView1"
                android:layout_marginTop="14dp"
                android:gravity="right"
                android:text="@string/addDiscountMsg"
                android:textAlignment="viewEnd"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textDirection="anyRtl" />

        </LinearLayout>
    </ScrollView>
</RelativeLayout>

如果我这样做,它会开始告诉我在xml文件的所有区域中删除类似的代码android:layout_alignRight="@+id/textView3"。将它们删除不会破坏应用程序本身吗? - sys_debug
它告诉你,因为“android:layout_alignRight”是RelativeLayout的属性,所以你可以将LinearLayout更改为RelativeLayout。 - Tobiel
我不理解这个……你说它只能有一个直接子节点,但是你的例子却有几个直接子节点。 - I wrestled a bear once.
不,它将LinearLayout作为scrollView的直接子项。所有其他子项都属于LinearLayout。@PootieTang - Tobiel
啊,我明白了...之前有点困惑,因为没有缩进。 - I wrestled a bear once.

8

按照以下方式操作,它将正常工作:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent">
<RelativeLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:textDirection="anyRtl"
tools:context=".AddDiscountActivity" >

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/textView3"
    android:layout_below="@+id/textView3"
    android:layout_marginTop="19dp"
    android:text="@string/discountLocationLabel"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textStyle="bold" />

<EditText
    android:id="@+id/shopLocation"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView4"
    android:layout_alignBottom="@+id/textView4"
    android:layout_alignRight="@+id/shopCity"
    android:ems="10"
    android:inputType="text" />

<TextView
    android:id="@+id/textView6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/textView5"
    android:layout_below="@+id/shopDiscount"
    android:layout_marginTop="21dp"
    android:text="@string/discountDurationLabel"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textStyle="bold" />

<EditText
    android:id="@+id/shopDiscountDuration"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/textView6"
    android:layout_alignLeft="@+id/shopDiscount"
    android:ems="10"
    android:inputType="text" />

<TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/shopDiscount"
    android:layout_alignParentRight="true"
    android:text="@string/discountRateLabel"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textStyle="bold" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView6"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="18dp"
    android:background="@drawable/roundbutton"
    android:text="@string/discountPublishButtonLabel"
    android:textColor="@color/white"
    android:onClick="SubmitData"
    android:width="250dp" />

<EditText
    android:id="@+id/shopCity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView4"
    android:layout_alignRight="@+id/shopName"
    android:ems="10"
    android:inputType="text" >


</EditText>

<EditText
    android:id="@+id/shopDiscount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/shopLocation"
    android:layout_below="@+id/shopLocation"
    android:layout_marginTop="14dp"
    android:ems="10"
    android:inputType="number" />

<EditText
    android:id="@+id/shopName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView2"
    android:layout_alignBottom="@+id/textView2"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="14dp"
    android:ems="10"
    android:inputType="text"> 
     <requestFocus />
</EditText>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/categoriesSpinner"
    android:layout_alignRight="@+id/textView2"
    android:text="@string/discountCategoryLabel"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textStyle="bold" />

<Spinner
    android:id="@+id/categoriesSpinner"
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:layout_above="@+id/shopName"
    android:layout_alignLeft="@+id/button1"
    android:layout_marginBottom="16dp" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignRight="@+id/textView2"
    android:layout_marginTop="206dp"
    android:text="@string/discountCityLabel"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textStyle="bold" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/shopCity"
    android:layout_alignLeft="@+id/textView5"
    android:layout_marginBottom="18dp"
    android:text="@string/discountShopLabel"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textStyle="bold" />

<TextView
    android:id="@+id/textView7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignRight="@+id/textView1"
    android:layout_marginTop="14dp"
    android:gravity="right"
    android:text="@string/addDiscountMsg"
    android:textAlignment="viewEnd"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/white"
    android:textDirection="anyRtl" />

  </RelativeLayout>
  </ScrollView>

希望能帮到您


3

我认为你需要在ScrollView中包含你的RelativeLayout(在定义之前和关闭之后)。

编辑:你还需要在LinearLayout中包含你的RelativeLayout。

例如:

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

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

   <RelativeLayout 
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/background"
     android:paddingBottom="16dp"
     android:paddingLeft="16dp"
     android:paddingRight="16dp"
     android:paddingTop="16dp"
     android:textDirection="anyRtl"
     tools:context=".AddDiscountActivity" >
  </RelativeLayout>

  </LinearLayout>

</SrcollView>

不允许这样做。在相对布局之前定义 xmlns 会导致错误。 - sys_debug
好的,抱歉。我使用了线性布局,在其中完成了它,它工作得很好。 - David N
你还必须将你的相对布局包含在线性布局中,这显然是必要的。 - David N

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