当其他textview垂直展开时,如何使textview始终显示在屏幕上?

时间:2019-01-11 04:13:46

标签: android-layout

我有一个带有两个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>

1 个答案:

答案 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>

原因:

  1. ConstraintLayout使您更容易开发想要实现的目标。”
  2. ConstraintLayout提供了Barrier,它可以停止将视图扩展到引用它的边界之外。

在我们的例子中,这是布局的作用: 根据需要,第一个TextView将展开以覆盖并覆盖整个可用视图,第二个TextView被锁定在底部。现在Barrier将阻止第一个TextView扩展到其边界之外,从而为底部的第二个TextView提供固定的空间。

重要提示:要在第一个TextView text1 = (TextView) findViewById(R.id.text1); text1.setMovementMethod(new ScrollingMovementMethod()); 中滚动内容,您需要在Java文件中添加以下行:

TextView

上面的声明将帮助您滚动内容,直到内容结束为止,无论它在您的ScrollView内部是什么,因此都不需要{{1}}!

希望这会有所帮助:)

参考: ConstraintLayout - Android Developer Documentation