我需要制作一个包含ScrollView的布局,该布局带有一些动态长度的文本和在FrameLayout之后(如下)的Button。对于长文本,一切都很好,但是当文本短时,按钮会卡在ScrollView文本部分底部的正下方。当文本短时,我想在屏幕底部显示一个FrameLayout;当文本长时,我想在ScrollView文本部分的正下方。 能做到吗 我的XML
<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:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".TeacherFullActivity"
tools:showIn="@layout/app_bar_teacher_full">
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
layout="@layout/listview_element_teachers"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/job_title"
style="@style/TitleMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/teacher_job_title" />
<android.support.v7.widget.RecyclerView
android:id="@+id/job_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/subject_title"
style="@style/TitleMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/teacher_subject_title" />
<android.support.v7.widget.RecyclerView
android:id="@+id/subject_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/workPlace_title"
style="@style/TitleMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/teacher_workplace_title" />
<android.support.v7.widget.RecyclerView
android:id="@+id/workplace_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingLeft="35dp"
android:paddingTop="5dp"
android:paddingRight="35dp"
android:paddingBottom="5dp">
<Button
android:id="@+id/teacher_external_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_rounded"
android:text="@string/open_link"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="17sp"
android:textStyle="bold"
/>
</FrameLayout>
</LinearLayout>
</ScrollView>
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:1)
您可以使用android:fillViewport
的{{1}}属性来完成此操作。
ScrollView
这样做是为了在<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"/>
</FrameLayout>
</LinearLayout>
</ScrollView>
的内容不足以填充屏幕的情况下,LinearLayout
会被拉伸以填充屏幕。这给LinearLayout
的增长空间(基于其FrameLayout
属性),又使layout_weight
浮动到屏幕底部(由于其Button
属性)。
如果layout_gravity
的内容大于屏幕的内容,则不会发生拉伸。该按钮被推离屏幕,但在您向下滚动时会显示(该按钮与文本之间没有空格)。
答案 1 :(得分:0)
您可以尝试以下代码进行操作:
<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:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".TeacherFullActivity"
tools:showIn="@layout/app_bar_teacher_full">
<ScrollView
android:id="@+id/scrollview"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraintTop_toTopOf="parent"
app:constraintStart_toStartOf="parent"
app:constraintEnd_toEndOf="parent"
app:constraintBottom_toTopOf="@id/frame">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
layout="@layout/listview_element_teachers"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/job_title"
style="@style/TitleMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/teacher_job_title" />
<android.support.v7.widget.RecyclerView
android:id="@+id/job_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/subject_title"
style="@style/TitleMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/teacher_subject_title" />
<android.support.v7.widget.RecyclerView
android:id="@+id/subject_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/workPlace_title"
style="@style/TitleMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/teacher_workplace_title" />
<android.support.v7.widget.RecyclerView
android:id="@+id/workplace_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</ScrollView>
<FrameLayout
android:id="@+id/frame"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="35dp"
android:paddingTop="5dp"
android:paddingRight="35dp"
android:paddingBottom="5dp"
app:constraintTop_toBottomOf="@id/scrollview"
app:constraintStart_toStartOf="parent"
app:constraintEnd_toEndOf="parent"
app:constraintBottom_toBottomOf="parent">
<Button
android:id="@+id/teacher_external_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_rounded"
android:text="@string/open_link"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="17sp"
android:textStyle="bold"
/>
</FrameLayout>
</android.support.constraint.ConstraintLayout>
说明:
我所做的事情 FrameLayout
被包含在 Button
外面的 ScrollView
它可以始终位于容器的底部。