当有许多子视图时,如何使相对布局可滚动?

Posted

技术标签:

【中文标题】当有许多子视图时,如何使相对布局可滚动?【英文标题】:how to make a relative layout scrollable when it has many children views? 【发布时间】:2012-12-22 00:59:59 【问题描述】:

我的 xml 如下所示

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/form_layout"
    android:layout_
    android:layout_
    android:background="@color/black"
    android:orientation="vertical"
    android:overScrollMode="ifContentScrolls"
    android:scrollbarStyle="insideOverlay"
    android:scrollbars="vertical"  >


    <Spinner
        android:id="@+id/formulae"
        android:layout_
        android:layout_
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        android:background="@color/LightSkyBlue"
        android:dropDownWidth="wrap_content"
        android:entries="@array/formulas"
        android:gravity="center"
        android:paddingLeft="0dp"
        android:textAlignment="center" /> 


    <EditText
        android:id="@+id/k2_editText"
        android:layout_
        android:layout_
        android:layout_above="@+id/al"
        android:layout_alignRight="@+id/al_editText"
        android:layout_alignTop="@+id/k2"
        android:layout_marginLeft="120dp"
        android:ems="10"
        android:enabled="true"
        android:inputType="numberDecimal"
        android:onClick="@drawable/textfield_activated_holo_light"
        android:textColor="@color/White"
        android:textSize="15sp"
        android:visibility="visible"
        android: />

    <TextView
        android:id="@+id/k1"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/dr"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="28dp"
        android:text="@string/K1"
        android:textColor="@color/white"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/k1_editText"
        android:layout_
        android:layout_
        android:layout_above="@+id/k2"
        android:layout_alignLeft="@+id/k2_editText"
        android:layout_alignRight="@+id/k2_editText"
        android:layout_alignTop="@+id/k1"
        android:background="@drawable/edit_text_holo_light"
        android:ems="10"
        android:enabled="true"
        android:inputType="numberDecimal"
        android:onClick="@drawable/textfield_activated_holo_light"
        android:textColor="@color/White"
        android:textSize="15sp"
        android:visibility="visible"
        android: />

     <TextView
        android:id="@+id/dr"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/formulae"
        android:layout_below="@+id/formulae"
        android:layout_marginTop="14dp"
        android:layout_toLeftOf="@+id/k1_editText"
        android:ems="10"
        android:gravity="center"
        android:text="@string/dr"
        android:textColor="@color/White"
        android:textSize="25sp" />



    <TextView
        android:id="@+id/k2"
        android:layout_
        android:layout_
        android:layout_alignRight="@+id/k1"
        android:layout_below="@+id/k1"
        android:layout_marginTop="38dp"
        android:text="@string/K2"
        android:textColor="@color/White"
        android:textSize="25sp" />

    <TextView
        android:id="@+id/al"
        android:layout_
        android:layout_
        android:layout_alignRight="@+id/k2"
        android:layout_below="@+id/k2"
        android:layout_marginTop="38dp"
        android:text="@string/AL"
        android:textColor="@color/White"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/al_editText"
        android:layout_
        android:layout_
        android:layout_alignRight="@+id/formulae"
        android:layout_alignTop="@+id/al"
        android:layout_marginLeft="120dp"
        android:ems="10"
        android:enabled="true"
        android:inputType="numberDecimal"
        android:onClick="@drawable/textfield_activated_holo_light"
        android:textColor="@color/White"
        android:textSize="15sp"
        android:visibility="visible"
        android: />

    <EditText
        android:id="@+id/al_const_editText"
        android:layout_
        android:layout_
        android:layout_alignBottom="@+id/al_const"
        android:layout_alignRight="@+id/al_editText"
        android:layout_marginLeft="120dp"
        android:ems="10"
        android:enabled="true"
        android:inputType="numberDecimal"
        android:onClick="@drawable/textfield_activated_holo_light"
        android:textColor="@color/White"
        android:textSize="15sp"
        android:visibility="visible"
        android: />

    <EditText
        android:id="@+id/dr_editText"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/k1_editText"
        android:layout_alignRight="@+id/formulae"
        android:layout_alignTop="@+id/dr"
        android:ems="10"
        android:inputType="numberDecimal|numberSigned"
        android:textColor="@color/White"
        android:textSize="15sp" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/al_const"
        android:layout_
        android:layout_
        android:layout_alignLeft="@+id/al"
        android:layout_below="@+id/al_editText"
        android:layout_marginTop="43dp"
        android:text="@string/Rx"
        android:textColor="@color/White"
        android:textSize="20sp" />

    <Button
        android:id="@+id/result"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@color/LightSkyBlue"
        android:text="@string/Result"
        android:textSize="25sp" />

</RelativeLayout>

图形布局:


我希望从 DR 到 A-const 的字段可以滚动。我在这里和其他地方搜索了所有可能的解决方案,但徒劳无功。作为android的初学者,我在这里寻求帮助

【问题讨论】:

我已经发布了解决您问题的解决方案。 ***.com/questions/13659442/relativelayout-scrollable 这解决了我的问题。 【参考方案1】:

试试这个:

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

    <ScrollView
        android:layout_
        android:layout_ >

        <RelativeLayout
            android:id="@+id/form_layout"
            android:layout_
            android:layout_
            android:background="@color/black" >

            <Spinner
                android:id="@+id/formulae"
                android:layout_
                android:layout_
                android:layout_marginLeft="50dp"
                android:layout_marginRight="50dp"
                android:background="@color/LightSkyBlue"
                android:dropDownWidth="wrap_content"
                android:entries="@array/formulas"
                android:gravity="center"
                android:paddingLeft="0dp"
                android:textAlignment="center" />

            <EditText
                android:id="@+id/k2_editText"
                android:layout_
                android:layout_
                android:layout_above="@+id/al"
                android:layout_alignRight="@+id/al_editText"
                android:layout_alignTop="@+id/k2"
                android:layout_marginLeft="120dp"
                android:ems="10"
                android:enabled="true"
                android:inputType="numberDecimal"
                android:onClick="@drawable/textfield_activated_holo_light"
                android:textColor="@color/White"
                android:textSize="15sp"
                android:visibility="visible"
                android: />

            <TextView
                android:id="@+id/k1"
                android:layout_
                android:layout_
                android:layout_alignParentLeft="true"
                android:layout_below="@+id/dr"
                android:layout_marginLeft="24dp"
                android:layout_marginTop="28dp"
                android:text="@string/K1"
                android:textColor="@color/white"
                android:textSize="25sp" />

            <EditText
                android:id="@+id/k1_editText"
                android:layout_
                android:layout_
                android:layout_above="@+id/k2"
                android:layout_alignLeft="@+id/k2_editText"
                android:layout_alignRight="@+id/k2_editText"
                android:layout_alignTop="@+id/k1"
                android:background="@drawable/edit_text_holo_light"
                android:ems="10"
                android:enabled="true"
                android:inputType="numberDecimal"
                android:onClick="@drawable/textfield_activated_holo_light"
                android:textColor="@color/White"
                android:textSize="15sp"
                android:visibility="visible"
                android: />

            <TextView
                android:id="@+id/dr"
                android:layout_
                android:layout_
                android:layout_alignLeft="@+id/formulae"
                android:layout_below="@+id/formulae"
                android:layout_marginTop="14dp"
                android:layout_toLeftOf="@+id/k1_editText"
                android:ems="10"
                android:gravity="center"
                android:text="@string/dr"
                android:textColor="@color/White"
                android:textSize="25sp" />

            <TextView
                android:id="@+id/k2"
                android:layout_
                android:layout_
                android:layout_alignRight="@+id/k1"
                android:layout_below="@+id/k1"
                android:layout_marginTop="38dp"
                android:text="@string/K2"
                android:textColor="@color/White"
                android:textSize="25sp" />

            <TextView
                android:id="@+id/al"
                android:layout_
                android:layout_
                android:layout_alignRight="@+id/k2"
                android:layout_below="@+id/k2"
                android:layout_marginTop="38dp"
                android:text="@string/AL"
                android:textColor="@color/White"
                android:textSize="25sp" />

            <EditText
                android:id="@+id/al_editText"
                android:layout_
                android:layout_
                android:layout_alignRight="@+id/formulae"
                android:layout_alignTop="@+id/al"
                android:layout_marginLeft="120dp"
                android:ems="10"
                android:enabled="true"
                android:inputType="numberDecimal"
                android:onClick="@drawable/textfield_activated_holo_light"
                android:textColor="@color/White"
                android:textSize="15sp"
                android:visibility="visible"
                android: />

            <EditText
                android:id="@+id/al_const_editText"
                android:layout_
                android:layout_
                android:layout_alignBottom="@+id/al_const"
                android:layout_alignRight="@+id/al_editText"
                android:layout_marginLeft="120dp"
                android:ems="10"
                android:enabled="true"
                android:inputType="numberDecimal"
                android:onClick="@drawable/textfield_activated_holo_light"
                android:textColor="@color/White"
                android:textSize="15sp"
                android:visibility="visible"
                android: />

            <EditText
                android:id="@+id/dr_editText"
                android:layout_
                android:layout_
                android:layout_alignLeft="@+id/k1_editText"
                android:layout_alignRight="@+id/formulae"
                android:layout_alignTop="@+id/dr"
                android:ems="10"
                android:inputType="numberDecimal|numberSigned"
                android:textColor="@color/White"
                android:textSize="15sp" >

                <requestFocus />
            </EditText>

            <TextView
                android:id="@+id/al_const"
                android:layout_
                android:layout_
                android:layout_alignLeft="@+id/al"
                android:layout_below="@+id/al_editText"
                android:layout_marginTop="43dp"
                android:text="@string/Rx"
                android:textColor="@color/White"
                android:textSize="20sp" />

            <Button
                android:id="@+id/result"
                android:layout_
                android:layout_
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:background="@color/LightSkyBlue"
                android:text="@string/Result"
                android:textSize="25sp" />
        </RelativeLayout>
    </ScrollView>

</RelativeLayout>

谢谢。

【讨论】:

它会抛出一个警告,说滚动视图标签的“不必要的视图” @AhamBrahmaasmi 我刚刚编辑了我的解决方案。试试看。谢谢。【参考方案2】:

试试这个……对我来说很好用

    <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/form_layout"
 android:layout_
 android:layout_
 android:orientation="vertical"
 android:overScrollMode="ifContentScrolls"
 android:scrollbarStyle="insideOverlay"
 android:scrollbars="vertical" >

<Spinner
    android:id="@+id/formulae"
    android:layout_
    android:layout_
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:dropDownWidth="wrap_content"
    android:gravity="center"
    android:paddingLeft="0dp" />

<ScrollView
    android:layout_
    android:layout_
    android:layout_above="@+id/result"
    android:layout_below="@+id/formulae" >

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_below="@+id/formulae" >

        <EditText
            android:id="@+id/k2_editText"
            android:layout_
            android:layout_
            android:layout_above="@+id/al"
            android:layout_alignRight="@+id/al_editText"
            android:layout_alignTop="@+id/k2"
            android:layout_marginLeft="120dp"
            android:ems="10"
            android:enabled="true"
            android:inputType="numberDecimal"
            android:textSize="15sp"
            android:visibility="visible"
            android: />

        <TextView
            android:id="@+id/k1"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/dr"
            android:layout_marginLeft="24dp"
            android:layout_marginTop="28dp"
            android:text="K1"
            android:textSize="25sp" />

        <EditText
            android:id="@+id/k1_editText"
            android:layout_
            android:layout_
            android:layout_above="@+id/k2"
            android:layout_alignLeft="@+id/k2_editText"
            android:layout_alignRight="@+id/k2_editText"
            android:layout_alignTop="@+id/k1"
            android:ems="10"
            android:enabled="true"
            android:inputType="numberDecimal"
            android:textSize="15sp"
            android:visibility="visible"
            android: />

        <TextView
            android:id="@+id/dr"
            android:layout_
            android:layout_
            android:layout_alignLeft="@+id/formulae"
            android:layout_below="@+id/formulae"
            android:layout_marginTop="14dp"
            android:layout_toLeftOf="@+id/k1_editText"
            android:ems="10"
            android:gravity="center"
            android:text="dr"
            android:textSize="25sp" />

        <TextView
            android:id="@+id/k2"
            android:layout_
            android:layout_
            android:layout_alignRight="@+id/k1"
            android:layout_below="@+id/k1"
            android:layout_marginTop="38dp"
            android:text="K2"
            android:textSize="25sp" />

        <TextView
            android:id="@+id/al"
            android:layout_
            android:layout_
            android:layout_alignRight="@+id/k2"
            android:layout_below="@+id/k2"
            android:layout_marginTop="38dp"
            android:text="AL"
            android:textSize="25sp" />

        <EditText
            android:id="@+id/al_editText"
            android:layout_
            android:layout_
            android:layout_alignRight="@+id/formulae"
            android:layout_alignTop="@+id/al"
            android:layout_marginLeft="120dp"
            android:ems="10"
            android:enabled="true"
            android:inputType="numberDecimal"
            android:textSize="15sp"
            android:visibility="visible"
            android: />

        <EditText
            android:id="@+id/al_const_editText"
            android:layout_
            android:layout_
            android:layout_alignBottom="@+id/al_const"
            android:layout_alignRight="@+id/al_editText"
            android:layout_marginLeft="120dp"
            android:ems="10"
            android:enabled="true"
            android:inputType="numberDecimal"
            android:textSize="15sp"
            android:visibility="visible"
            android: />

        <EditText
            android:id="@+id/dr_editText"
            android:layout_
            android:layout_
            android:layout_alignLeft="@+id/k1_editText"
            android:layout_alignRight="@+id/formulae"
            android:layout_alignTop="@+id/dr"
            android:ems="10"
            android:inputType="numberDecimal|numberSigned"
            android:textSize="15sp" >

            <requestFocus />
        </EditText>

        <TextView
            android:id="@+id/al_const"
            android:layout_
            android:layout_
            android:layout_alignLeft="@+id/al"
            android:layout_below="@+id/al_editText"
            android:layout_marginTop="43dp"
            android:text="Rx"
            android:textSize="20sp" />
    </RelativeLayout>
</ScrollView>

<Button
    android:id="@+id/result"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:text="Result"
    android:textSize="25sp" />

</RelativeLayout>

【讨论】:

渲染时引发异常:ScrollView 只能承载一个直接子节点

以上是关于当有许多子视图时,如何使相对布局可滚动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在相对布局中添加固定标题和滚动视图表行?

如何避免相对布局中可绘制背景的额外高度?

当softKeyBoard隐藏按钮和其他元素时如何使布局可滚动[ANDROID]

相对布局内的列表视图和滚动视图不覆盖屏幕

如何知道在相对布局中单击了哪个子视图

调整相对布局/图像视图