【问题标题】:view design issue: how can I make scroll view's child view fill screen?视图设计问题:如何使滚动视图的子视图填充屏幕?
【发布时间】:2018-07-27 06:03:46
【问题描述】:

堆栈溢出。 我现在正在制作一个android输入表单视图,并且在使用滚动视图时遇到了一些问题。

首先,请看我的画。 设计蓝图

我想在垂直视图中放置一些editText,并在屏幕底部放置一个提交按钮。但是scrollView的子组件的layout_height应该是wrap_content,而不是匹配父组件。所以我的提交按钮设置在最后编辑文本的下方。如果我可以在最后一个 editText 和按钮之间留一些边距,那将很容易,但我不能。如果我这样做,我认为布局会在不同的设备尺寸下产生一些问题。

这是我的 layout.xml

<?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="match_parent"
android:layout_height="match_parent"
tools:context=".activity.ResendPwActivity">

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

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

        <LinearLayout
            android:id="@+id/title_layout"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:orientation="horizontal">

            <ImageButton
                android:id="@+id/prev_btn"
                android:layout_width="9dp"
                android:layout_height="15dp"
                android:layout_gravity="center_vertical"
                android:layout_marginStart="16dp"
                android:background="@drawable/prev"
                tools:ignore="ContentDescription" />

            <TextView
                android:id="@+id/change_pw_string"
                android:layout_width="match_parent"
                android:layout_height="48dp"
                android:layout_marginStart="-25dp"
                android:gravity="center_vertical|center_horizontal"
                android:text="@string/change_password"
                android:textColor="@color/black"
                android:textSize="17sp" />
        </LinearLayout>

        <View
            android:id="@+id/line"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_below="@id/title_layout"
            android:background="#dddddd" />


        <TextView
            android:id="@+id/current_pw_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/line"
            android:layout_marginEnd="35dp"
            android:layout_marginStart="35dp"
            android:layout_marginTop="30dp"
            android:text="@string/current_pw_string"
            android:textColor="@color/black"
            android:textSize="13sp" />


        <EditText
            android:id="@+id/current_pw_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/current_pw_label"
            android:layout_marginEnd="35dp"
            android:layout_marginStart="35dp"
            android:layout_marginTop="15dp"
            android:backgroundTint="@color/email_password_edittext_line_color_selector"
            android:ems="10"
            android:hint="@string/password_hint"
            android:inputType="textPassword"
            android:textColor="@color/black"
            android:textSize="17sp" />


        <TextView
            android:id="@+id/new_pw_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/current_pw_input"
            android:layout_marginEnd="35dp"
            android:layout_marginStart="35dp"
            android:layout_marginTop="30dp"
            android:text="@string/new_pw_string"
            android:textColor="@color/black"
            android:textSize="13sp" />

        <EditText
            android:id="@+id/new_pw_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/new_pw_label"
            android:layout_marginEnd="35dp"
            android:layout_marginStart="35dp"
            android:layout_marginTop="15dp"
            android:backgroundTint="@color/email_password_edittext_line_color_selector"
            android:ems="10"
            android:hint="@string/password_hint"
            android:inputType="textPassword"
            android:textColor="@color/black"
            android:textSize="17sp" />

        <TextView
            android:id="@+id/validate_pw_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/new_pw_input"
            android:layout_marginEnd="35dp"
            android:layout_marginStart="35dp"
            android:layout_marginTop="30dp"
            android:text="@string/validate_new_pw_string"
            android:textColor="@color/black"
            android:textSize="13sp" />


        <EditText
            android:id="@+id/validate_pw_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/validate_pw_label"
            android:layout_marginBottom="30dp"
            android:layout_marginEnd="35dp"
            android:layout_marginStart="35dp"
            android:layout_marginTop="15dp"
            android:backgroundTint="@color/email_password_edittext_line_color_selector"
            android:ems="10"
            android:hint="@string/password_hint"
            android:inputType="textPassword"
            android:textColor="@color/black"
            android:textSize="17sp" />

        <View
            android:id="@+id/view_layout"
            android:layout_width="match_parent"
            android:layout_height="65dp"
            android:layout_below="@id/validate_pw_input" />


        <Button
            android:id="@+id/submit_btn"
            android:layout_width="match_parent"
            android:layout_height="65dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/update_profile_btn_selector"
            android:text="@string/update_change"
            android:textColor="@color/white"
            android:textSize="20sp" />

    </RelativeLayout>


</ScrollView>

我该怎么办?

【问题讨论】:

    标签: android view


    【解决方案1】:

    试试这个

    <?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="match_parent"
        android:layout_height="match_parent"
        tools:context=".activity.ResendPwActivity">
    
        <ScrollView
            android:layout_width="match_parent"
            android:fillViewport="true"
            android:layout_height="match_parent">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <LinearLayout
                    android:id="@+id/title_layout"
                    android:layout_width="match_parent"
                    android:layout_height="48dp"
                    android:orientation="horizontal">
    
                    <ImageButton
                        android:id="@+id/prev_btn"
                        android:layout_width="9dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginStart="16dp"
                        android:background="@drawable/prev"
                        tools:ignore="ContentDescription" />
    
                    <TextView
                        android:id="@+id/change_pw_string"
                        android:layout_width="match_parent"
                        android:layout_height="48dp"
                        android:layout_marginStart="-25dp"
                        android:gravity="center_vertical|center_horizontal"
                        android:text="@string/change_password"
                        android:textColor="@color/black"
                        android:textSize="17sp" />
                </LinearLayout>
    
                <View
                    android:id="@+id/line"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:layout_below="@id/title_layout"
                    android:background="#dddddd" />
    
    
                <TextView
                    android:id="@+id/current_pw_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/line"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="30dp"
                    android:text="@string/current_pw_string"
                    android:textColor="@color/black"
                    android:textSize="13sp" />
    
    
                <EditText
                    android:id="@+id/current_pw_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/current_pw_label"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="15dp"
                    android:backgroundTint="@color/email_password_edittext_line_color_selector"
                    android:ems="10"
                    android:hint="@string/password_hint"
                    android:inputType="textPassword"
                    android:textColor="@color/black"
                    android:textSize="17sp" />
    
    
                <TextView
                    android:id="@+id/new_pw_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/current_pw_input"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="30dp"
                    android:text="@string/new_pw_string"
                    android:textColor="@color/black"
                    android:textSize="13sp" />
    
                <EditText
                    android:id="@+id/new_pw_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/new_pw_label"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="15dp"
                    android:backgroundTint="@color/email_password_edittext_line_color_selector"
                    android:ems="10"
                    android:hint="@string/password_hint"
                    android:inputType="textPassword"
                    android:textColor="@color/black"
                    android:textSize="17sp" />
    
                <TextView
                    android:id="@+id/validate_pw_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/new_pw_input"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="30dp"
                    android:text="@string/validate_new_pw_string"
                    android:textColor="@color/black"
                    android:textSize="13sp" />
    
    
                <EditText
                    android:id="@+id/validate_pw_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/validate_pw_label"
                    android:layout_marginBottom="30dp"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="15dp"
                    android:backgroundTint="@color/email_password_edittext_line_color_selector"
                    android:ems="10"
                    android:hint="@string/password_hint"
                    android:inputType="textPassword"
                    android:textColor="@color/black"
                    android:textSize="17sp" />
    
                <View
                    android:id="@+id/view_layout"
                    android:layout_width="match_parent"
                    android:layout_height="65dp"
                    android:layout_below="@id/validate_pw_input" />
    
    
                <Button
                    android:id="@+id/submit_btn"
                    android:layout_width="match_parent"
                    android:layout_height="65dp"
                    android:layout_alignParentBottom="true"
                    android:background="@drawable/update_profile_btn_selector"
                    android:text="@string/update_change"
                    android:textColor="@color/white"
                    android:textSize="20sp" />
    
            </RelativeLayout>
    
    
        </ScrollView>
    

    【讨论】:

    • 这就是我想要的!你刚刚添加 android:fillViewport="true" 对吗?感谢您的帮助。你拯救了我的一天!
    【解决方案2】:

    您的按钮应位于屏幕底部以获得更好的响应式 UI 并且滚动视图必须只有一个孩子,因此您不能一次在滚动视图中添加按钮和相对布局

    <?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="match_parent"
        android:layout_height="match_parent"
        tools:context=".activity.ResendPwActivity">
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_above="@+id/submit_btn"
            android:layout_height="match_parent">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <LinearLayout
                    android:id="@+id/title_layout"
                    android:layout_width="match_parent"
                    android:layout_height="48dp"
                    android:orientation="horizontal">
    
                    <ImageButton
                        android:id="@+id/prev_btn"
                        android:layout_width="9dp"
                        android:layout_height="15dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginStart="16dp"
                        android:background="@drawable/prev"
                        tools:ignore="ContentDescription" />
    
                    <TextView
                        android:id="@+id/change_pw_string"
                        android:layout_width="match_parent"
                        android:layout_height="48dp"
                        android:layout_marginStart="-25dp"
                        android:gravity="center_vertical|center_horizontal"
                        android:text="@string/change_password"
                        android:textColor="@color/black"
                        android:textSize="17sp" />
                </LinearLayout>
    
                <View
                    android:id="@+id/line"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:layout_below="@id/title_layout"
                    android:background="#dddddd" />
    
    
                <TextView
                    android:id="@+id/current_pw_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/line"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="30dp"
                    android:text="@string/current_pw_string"
                    android:textColor="@color/black"
                    android:textSize="13sp" />
    
    
                <EditText
                    android:id="@+id/current_pw_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/current_pw_label"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="15dp"
                    android:backgroundTint="@color/email_password_edittext_line_color_selector"
                    android:ems="10"
                    android:hint="@string/password_hint"
                    android:inputType="textPassword"
                    android:textColor="@color/black"
                    android:textSize="17sp" />
    
    
                <TextView
                    android:id="@+id/new_pw_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/current_pw_input"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="30dp"
                    android:text="@string/new_pw_string"
                    android:textColor="@color/black"
                    android:textSize="13sp" />
    
                <EditText
                    android:id="@+id/new_pw_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/new_pw_label"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="15dp"
                    android:backgroundTint="@color/email_password_edittext_line_color_selector"
                    android:ems="10"
                    android:hint="@string/password_hint"
                    android:inputType="textPassword"
                    android:textColor="@color/black"
                    android:textSize="17sp" />
    
                <TextView
                    android:id="@+id/validate_pw_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/new_pw_input"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="30dp"
                    android:text="@string/validate_new_pw_string"
                    android:textColor="@color/black"
                    android:textSize="13sp" />
    
    
                <EditText
                    android:id="@+id/validate_pw_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/validate_pw_label"
                    android:layout_marginBottom="30dp"
                    android:layout_marginEnd="35dp"
                    android:layout_marginStart="35dp"
                    android:layout_marginTop="15dp"
                    android:backgroundTint="@color/email_password_edittext_line_color_selector"
                    android:ems="10"
                    android:hint="@string/password_hint"
                    android:inputType="textPassword"
                    android:textColor="@color/black"
                    android:textSize="17sp" />
                <!--for responsive layout Button should be out side of scroll -->
            </RelativeLayout>
        </ScrollView>
    
        <Button
            android:id="@+id/submit_btn"
            android:layout_width="match_parent"
            android:layout_height="65dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/update_profile_btn_selector"
            android:text="@string/update_change"
            android:textColor="@color/white"
            android:textSize="20sp" />
    </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多