当有许多子视图时,如何使相对布局可滚动?
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 只能承载一个直接子节点以上是关于当有许多子视图时,如何使相对布局可滚动?的主要内容,如果未能解决你的问题,请参考以下文章