【问题标题】:TextView: wrap content in multiple linesTextView:将内容包装在多行中
【发布时间】:2019-09-22 02:08:19
【问题描述】:

我有以下 TextView:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:minLines="2"
    android:text="Lorem ipsum dolor sit amet"/>

这是我得到的行为:

这是我预期的行为:

我想在不必设置硬编码宽度的情况下获得这种行为,因为每种语言的文本都不同。有什么办法吗?

编辑:我还想避免将 TextView 的宽度绑定到父级的宽度。是否有足够的空间在一行中显示整个文本并不重要,我希望它显示在两行中。鉴于此,我希望 TextView 具有尽可能小的宽度。

【问题讨论】:

  • 只需添加 TextView 的开始和结束约束

标签: android xml textview multiline


【解决方案1】:

是的,您可以使用ConstraintLayoutGuidelines 来确定您的textView 宽度(非硬编码),这是一个简单的示例不使用指导线(文本视图有限制) :

<?xml version="1.0" encoding="utf-8"?>
  <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/mainQuestionsLayout"
  android:layout_width="match_parent"
  android:layout_height="match_parent">


<TextView
    android:id="@+id/textView11"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="TextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdw"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

看起来像这样:

现在,如果您想要更灵活的宽度您可以使用指南,或者只是将您的文本视图约束赋予另一个视图并将其宽度设置为0dp

这是一个带有指南的示例:

<?xml version="1.0" encoding="utf-8"?>
<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/mainQuestionsLayout"
  android:layout_width="match_parent"
  android:layout_height="match_parent">


<TextView
    android:id="@+id/textView11"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="TextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdwTextVieasdasdw"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/guideline19"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<android.support.constraint.Guideline
    android:id="@+id/guideline19"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.5" />
</android.support.constraint.ConstraintLayout>

它看起来像这样:

请注意,虚线是实际的指南,这是它在设计预览中的样子,你不会在运行时看到指南,但你的 textView 会是这样的。

【讨论】:

  • 感谢您的回答!但我也不想将 TextView 的宽度绑定到父级的宽度。我想要的是 TextView 具有最小可能的宽度,前提是文本显示在两行中(如果没有足够的空间,文本显示在两行以上是可以接受的)。我一点都不清楚,对此感到抱歉。
  • 您不必将TextView的宽度绑定到父级的宽度,请查看答案中谈论准则的部分。如果你想告诉你的 textView - 是 2 行,那是另外一回事,我建议你实际上从你的代码中做到这一点
  • 我理解,但每条准则都是根据与父母边界的距离(绝对或百分比)来定义的。因此,当您将 TextView 的宽度绑定到指南时,您就是在间接将其绑定到父项的宽度。
  • 在这种情况下,我认为除了为视图设置固定大小之外,您没有其他方法可以做到这一点。或者 - 你可以得到你的 textViews 文本,把它分成两半,然后 aff \n 在它的中间。结果将是 2 行 textView
  • \n 解决方案正是我最终所做的。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2021-04-17
相关资源
最近更新 更多