我有一个带有两个textViews的android布局文件,第一个可能包含长文本,沿着屏幕空间垂直扩展,另一个textview仅包含一行文本。
两个textView都开始在屏幕上垂直居中,第二个在下面,而第二个在下面。
碰巧第一个textview的内容可以更改,向其中添加更多文本,并且在某些时候第一个textview展开并占据整个屏幕,将第二个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>
答案 0 :(得分:0)
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>
原因:
Barrier
,它可以停止将视图扩展到引用它的边界之外。在我们的例子中,这是布局的作用:
根据需要,第一个TextView
将展开以覆盖并覆盖整个可用视图,第二个TextView
被锁定在底部。现在Barrier
将阻止第一个TextView
扩展到其边界之外,从而为底部的第二个TextView
提供固定的空间。
重要提示:要在第一个TextView text1 = (TextView) findViewById(R.id.text1);
text1.setMovementMethod(new ScrollingMovementMethod());
中滚动内容,您需要在Java文件中添加以下行:
TextView
上面的声明将帮助您滚动内容,直到内容结束为止,无论它在您的ScrollView
内部是什么,因此都不需要{{1}}!
希望这会有所帮助:)