android-layout - 当其他文本视图垂直扩展时,如何使文本视图始终显示在屏幕上?
问题描述
我有一个带有两个 textViews 的 android 布局文件,第一个可能包含长文本,沿屏幕空间垂直扩展,另一个 textview 仅包含一行文本。
两个 textViews 开始在屏幕上垂直居中,第二个在第一个下方。
碰巧第一个 textview 的内容可以更改,向其中添加更多文本,并且在某些时候第一个 textview 扩展并占据整个屏幕,将第二个 textview 推到屏幕外。
我需要第二个文本视图在到达屏幕边界时不会被推到屏幕外,第二个文本视图必须拥有屏幕上的最后一块空间来存放其内容。
这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/firstTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/secondTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
</LinearLayout>
</RelativeLayout>
解决方案
ConstraintLayout
救援!
build.gradle
内部app
模块中的依赖关系:
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
您想要实现的非常基本的布局应该是这样的:
<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">
<TextView
android:id="@+id/text1"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="8dp"
android:scrollbars="vertical"
android:text="*YOUR ENDLESS TEXT HERE*"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/barrier"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<android.support.constraint.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="top"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/text2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="8dp"
android:singleLine="true"
android:text="*YOUR SINGLE LINE TEXT HERE*"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier" />
</android.support.constraint.ConstraintLayout>
原因:
- ConstraintLayout 使您想要实现的开发变得更加容易。
- ConstraintLayout 提供
Barrier
,它可以停止将视图扩展到其边界之外,这些视图被引用。
在这里,在我们的例子中,这是布局的作用:首先TextView
扩展以拉伸和覆盖可用的整个视图,其次TextView
锁定在底部,就像你想要的那样。现在Barrier
将阻止第一个TextView
缩放超出其边界,为底部的第二个提供固定空间。
重要提示:要先滚动您的内容TextView
,您需要在 java 文件中添加以下行:
TextView text1 = (TextView) findViewById(R.id.text1);
text1.setMovementMethod(new ScrollingMovementMethod());
上面的声明将帮助您滚动内容直到它结束,无论它有多大,在您TextView
自己内部,所以ScrollView
不需要!
希望这可以帮助 :)
推荐阅读
- python - 为什么我会收到 smtplib.SMTPRecipientsRefused: 错误?
- php - 从 URL/主机中删除子域以匹配附属链接数组中的域
- c# - 如何在 64 位 Windows 操作系统上为 32 位 Outlook 创建安装文件?
- css - 为什么我在 css 中对我的 tansition 产生了故障影响?
- node.js - API适用于打字稿,但是当我转译它时找不到模型
- python-3.x - 如何使用其文档字符串文档获取 Python 类的变量列表
- python - 运行编译文件(.pyc)时如何解决导入错误?
- google-admin-sdk - 未收到 Google Reports API 推送通知/观看请求
- c++ - 使用模板保证“if”语句消除
- python - 来自机器人的 Json 编辑