片段,ScrollView下的按钮从导航菜单下拉出屏幕

时间:2018-01-23 00:13:08

标签: android android-layout android-fragments

我希望你能帮助我,我正在制作一个片段布局,屏幕底部有一个固定按钮,但是当片段显示时,按钮隐藏在android导航栏下面(黑色的带有家,后退和菜单按钮)。这是要膨胀的片段布局的代码:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/questionFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ottegui.ottegui_android.Fragments.QuestionFragment">

    <ScrollView
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:id="@+id/linearLayoutQuestion"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/textview_q_title"
                style="?android:textAppearanceMedium"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="20dp"
                android:lineSpacingMultiplier="1.2"
                android:padding="16dp"
                android:text="Title"
                android:textColor="#333"
                android:textSize="16sp" />

            <RadioGroup
                android:id="@+id/radioGroup"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:orientation="vertical" />
        </LinearLayout>

    </ScrollView>

    <LinearLayout
        android:id="@+id/linearLayoutQuestionButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <Button
            android:id="@+id/button_continue"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:background="?attr/colorPrimary"
            android:text="Next Question"
            android:textColor="#FFF"
            android:textSize="16sp" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

其中的RadioGroup在Fragment类上动态填充。 TextView也是从Fragment类设置的。

这是导航下按钮的图像,你只能看到一个紫色的边框,我希望它在片段的底部。我认为也许ConstraitLayout是一个糟糕的选择,因为在一些教程中我看到总是使用FrameLayout(我开始构建我自己,这就是我使用ConstraitLayout的原因)

enter image description here

2 个答案:

答案 0 :(得分:2)

ConstraintLayout不是“icky”,不再是其他类型的布局。为了您的目的,您必须做两件事:

  1. 使用ConstraintLayout的直接子项创建完整的边到边双向链。

  2. 根据您的需要声明这些孩子的身高属性。

  3. xml中有两个ConstraintLayout的孩子,ScrollView名为contentLinearLayout名为linearLayoutQuestionButton。每个布局都连接到左侧和右侧的parent,而前者连接到顶部的parent,后者连接到底部的parent。但是,他们没有彼此连接!通过添加

    更改此设置
    app:layout_constraintBottom_toTopOf="@id/linearLayoutQuestionButton"
    

    content

    app:layout_constraintTop_toBottomOf="@id/content"
    

    linearLayoutQuestionButton

    然后,您希望第一个孩子(content)填充除第二个孩子(linearLayoutQuestionButton)的高度之外的所有可用高度。这样做的正确值既不是match_parent也不是wrap_content,但有些违反直觉

    android:layout_height="0dp"
    

    您的完整布局将如下所示:

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/questionFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.ottegui.ottegui_android.Fragments.QuestionFragment">
    
        <ScrollView
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            app:layout_constraintBottom_toTopOf="@id/linearLayoutQuestionButton"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <LinearLayout
                android:id="@+id/linearLayoutQuestion"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/textview_q_title"
                    style="?android:textAppearanceMedium"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="20dp"
                    android:lineSpacingMultiplier="1.2"
                    android:padding="16dp"
                    android:text="Title"
                    android:textColor="#333"
                    android:textSize="16sp" />
    
                <RadioGroup
                    android:id="@+id/radioGroup"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginLeft="16dp"
                    android:layout_marginRight="16dp"
                    android:orientation="vertical" />
            </LinearLayout>
    
        </ScrollView>
    
        <LinearLayout
            android:id="@+id/linearLayoutQuestionButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/content">
    
            <Button
                android:id="@+id/button_continue"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_gravity="center_horizontal"
                android:background="?attr/colorPrimary"
                android:text="Next Question"
                android:textColor="#FFF"
                android:textSize="16sp" />
    
        </LinearLayout>
    
    </android.support.constraint.ConstraintLayout>
    

答案 1 :(得分:0)

我猜测布局,你来自iOS开发?我建议摆脱icky约束布局并与亲戚一起去 将滚动视图与顶部对齐,滚动视图下方的按钮布局与底部对齐。