【问题标题】:Relativelayout position view between two views两个视图之间的相对布局位置视图
【发布时间】:2016-08-19 13:43:58
【问题描述】:

所以我目前正在开发 Android 上的应用程序,但我遇到了一个关于 RelativeLayout 的特定问题,我找不到解决方法。

我在layout里面有三个view如下:TextView、Textview和ImageView(横放),下面是ios对应的截图:

中间的Textview应该坚持第一个,直到他到达Imageview,当他这样做时,他保持他的最小尺寸(包装内容),而第一个Textview被截断。

在 IOS 上我设置了约束的优先级来完成这个,但我不知道如何在 Android 上解决这个问题。

这是我尝试过的:

<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/daily_movie_title_box">

    <TextView
    android:id="@+id/daily_header_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"


    android:padding="15dp"
    android:text="New Text aawi oa ioawfwi"
    android:textSize="16sp"

    android:textStyle="bold"
    android:textColor="@color/white"

    android:lines="1"
    android:singleLine="true"

    android:layout_alignParentStart="true"
    />


    <TextView
    android:id="@+id/duration_text"
    android:text="138 mins"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:textSize="13sp"
    android:textColor="@color/white"
    android:lines="1"
    android:layout_alignBaseline="@id/daily_header_textview"

    android:layout_toStartOf="@+id/certification_icon"
    android:layout_toEndOf="@id/daily_header_textview"

    />

    <ImageView
    android:id="@id/certification_icon"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:src="@drawable/uk12a"
    android:layout_alignBottom="@id/daily_header_textview"
    app:layout_aspectRatio="100%"/>

</android.support.percent.PercentRelativeLayout>

这导致了这个(这就是我想要的):

但是当我增加第一个 Textview 文本时,它的行为并不如我所愿......

是否可以在 Android 中实现我想要的行为(保留中间的 Textview 包装内容,并在需要时截断第一个)?

如果我最终找到解决方案,我会发布更新,只是想看看是否有人能找到一种简单的方法来实现这种行为,我怀疑有。

谢谢。

【问题讨论】:

  • 您可以尝试将所有视图的宽度设置为“0dp”并使用属性layout_weight,然后与每个视图的百分比值相关(例如第一个视图5,下一个视图2,最后一个视图1 )。不确定这是否是您要查找的内容。
  • 为dp中的第一个TextView定义一个固定的layout_width。
  • 但我希望第一个 Textview 的宽度是动态的,以包装它的内容,除非没有可用空间,在这种情况下截断。原因是我希望中间的 Textview 位于第一个的末尾。在当前场景中,虽然中间文本被截断。

标签: android android-layout textview android-relativelayout


【解决方案1】:

据我了解,您希望第一个 TextView 尽可能大,如果文本太小,则不要在文本后添加空格。第二个TextView 应该只有wrap_content,但是当行没有时它应该填充父布局的其余部分。 ImageView 设置为 wrap_content

我用这个布局对其进行了测试:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:shrinkColumns="0"
        android:stretchColumns="1">

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="Shrinking text dddddddddddddddddddddd"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Midle column"/>

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/ic_launcher"/>
        </TableRow>

    </TableLayout>

</LinearLayout>

唯一的问题是,如果第二列的文本非常大,它会将其他视图推出父视图。但在你的情况下,我认为这不会是一个问题。否则,我认为它可以完成工作。

【讨论】:

  • 是的!似乎完全按照我的意愿行事(你是对的,中间文本不应该太长)。谢谢:)
【解决方案2】:

以下是一些建议的解决方案:

  • 您可以将LinearLayout 与每个组件的水平方向和权重一起使用(TextViewsImageView)。
  • 您可以设置第二个 TextView 的最小和最大文本长度。

但我更喜欢应用第一个解决方案。您可以使用以下方法为每个组件(屏幕上的空间量)分配权重:

android:layout_height

【讨论】:

  • 是的,我明白了,但是使用第一种方法会使第一个 Textview 的宽度变为静态,而不管其中的文本如何。我想在第一个文本视图的末尾对齐中间的文本视图,这样它们看起来就像在同一行。我已经尝试过第二种方法,但是当我设置其他约束(toStartOf,toEndOf)时,布局似乎忽略了这个属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2014-01-28
相关资源
最近更新 更多