宽度为0的Android Textview强制内容在其下方消失

时间:2016-05-10 23:38:54

标签: android android-layout

我有一个TextView,其宽度不应超过它上面的ImageView。图像和文本都是从服务器下载的,我不知道它们的尺寸(也不能做出假设)。我通过逻辑使用this SO post.

来包装文本内容

这是我的布局XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentLL"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout android:orientation="vertical"
        android:id="@+id/LL1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/image1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:width="0dp"
            android:text="This is a string whose width may or may not be more than the image downloaded" />
    </LinearLayout>

    <TextView android:background="@android:color/holo_red_dark"
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Second Text"/>
</LinearLayout>

使用此代码,结尾处的TextView(text2)甚至不显示。这个问题有两个解决方案:

  1. 应用android:maxLines =&#34; 5&#34;到text1。这种方法的问题在于Text1视图总是高5行(我理解&#39;行&#39;不是高度的单位,但这是我在视觉上看到的)。因此,如果文本内容只是一个单词,那么下面会有一个很大的空白区域。然后text2出现。
  2. 将最顶层的线性布局(parentLL)更改为RelativeLayout。然后text2可以与alignBelow = LL1一起使用。这按预期工作。但我无法将最顶层的视图迁移到RelativeLayout,因为此视图来自不在我控制范围内的库。我只能修改LL1及其子女。由于我的代码,下面的其他视图(如text2)正在受到影响(通过不显示)。
  3. 第三种方法是将textview设置为ImageView上的复合可绘制对象。我想这可能有用(没有经过测试),但我的要求是显示TextView,如果图像下载失败(只能在一段时间后检测到)。所以我需要一个TextView。此外,我的LinearLayout LL1也可以有其他孩子。
  4. 我会请求帮助理解:

    1. 为什么我的代码没有显示在textview&#39; text1&#39;?下面的内容?在textview上宽度= 0时,似乎将父级的高度设置为match_parent。
    2. RelativeLayout如何顺利处理?我可以在TextView的onMeasure中复制任何这种行为吗?假设我已经下载了用于检测图像的回调,我也可以获得图像宽度。

2 个答案:

答案 0 :(得分:1)

我认为你遇到的是设置宽度和高度但不设置布局权重的冲突,这是Linear Layouts工作方式的关键因素。如果在那里再添加一个垂直LinearLayout然后将@ id / text2移动到其中,则应该设置。您需要以下内容(显然根据您的规格修改,这只是一个快速测试)。注意我使用android:layout_weight,

 <customErrors mode="Off" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="/404.aspx" />
  <error statusCode="500" redirect="/500.aspx"/>
</customErrors>

将屏幕垂直分成两半,如图所示,

Photo of resulting layout

答案 1 :(得分:0)

我必须将TextView包装在RelativeLayout中,它由LinearLayout包装。对此解决方案不满意,但这是目前唯一的方法。