使用ellipsize时,TextView会修改Linearlayout比例

时间:2016-06-03 15:47:44

标签: android android-layout listview android-linearlayout

我正在使用ListView来显示电影列表。我使用android:layout_weight来安排每个项目,并为我的RelativeLayout添加0.5,其中包含2个TextView: ZoneName FilmName

enter image description here

fragment1.xml:

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

    <TextView
        android:text="En séléctionnant un des écrans ci-dessous, vous accéderai à des informations complémentaires sur les contenus qui sont en train de passer à l'écran."
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="20dp"
        android:id="@+id/secondScreenInformationTextView"
        android:textColor="#FFF" />

    <ListView
        android:id="@+id/lv_select_screen"
        android:background="#26FFFFFF"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</LinearLayout>

此处我的 item_select_screen.xml

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

    <ImageView
        android:id="@+id/item_img_screen_type"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_weight="0.2"
        />
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_marginTop="10dp"
        >
        <TextView
            android:id="@+id/item_title_screen"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:ellipsize="end"
            android:textSize="18sp"
            android:textColor="#FFF"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/item_content_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#FFF"
            android:layout_below="@+id/item_title_screen"/>
    </RelativeLayout>

    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_weight="0.2"
        android:id="@+id/item_poster_miniature"/>

    <ImageView
        android:layout_width="15dp"
        android:layout_margin="2dp"
        android:layout_height="15dp"
        android:layout_weight="0.1"
        android:src="@drawable/menu_triangle"
        android:id="@+id/item_img_triangle_select_screen"
        android:layout_gravity="center_vertical"/>

</LinearLayout>

它适用于短字符串,但我添加了android:maxLines =“1”和android:ellipsize =“end”以在必要时快捷键入字符串。但是当它发生时,它会扩展我的RelativeLayout的宽度,我的3 imageView似乎减少了以补偿变化。

我可以使用maxWidth来修复它,但它不再是动态的。

3 个答案:

答案 0 :(得分:2)

当您使用重量时,请始终根据0dp给出orientation作为孩子的身高或宽度,并让重量进行测量。

所以你的RelativeLayout的宽度应为0dp,其余的相同。我猜那就是问题。

答案 1 :(得分:1)

是的,这种行为是非常期待的。

您正在使用,

android:layout_width="wrap_content"

代表TextView。所以它会尝试包装其全部内容并相应地调整其大小。

由于内容很大而且是椭圆化的, TextView会使用最大可用宽度来包装它的所有内容,然后在最后进行椭圆化。

所以,解决方案是,

1)TextView的宽度固定,最后有椭圆形。

2)或以编程方式将内容截断为完美布局渲染所需的长度。您还可以将ellipsize添加到截断的字符串中。

两者都会产生相同的效果(您的选择),但绝不会扭曲您的布局

答案 2 :(得分:1)

问题是你在dp中设置宽度会增加重量,尝试将它们设置为0dp

<ImageView
    android:id="@+id/item_img_screen_type"
    android:layout_width="0dp"
    android:layout_height="60dp"
    android:layout_weight="0.2"
    />
<RelativeLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.5"
    android:layout_marginTop="10dp"
    >
    <TextView
        android:id="@+id/item_title_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:ellipsize="end"
        android:textSize="18sp"
        android:textColor="#FFF"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/item_content_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFF"
        android:layout_below="@+id/item_title_screen"/>
</RelativeLayout>

<ImageView
    android:layout_width="0dp"
    android:layout_height="60dp"
    android:layout_weight="0.2"
    android:id="@+id/item_poster_miniature"/>

<ImageView
    android:layout_width="0dp"
    android:layout_margin="2dp"
    android:layout_height="15dp"
    android:layout_weight="0.1"
    android:src="@drawable/menu_triangle"
    android:id="@+id/item_img_triangle_select_screen"
    android:layout_gravity="center_vertical"/>