Выравнивание справа и слева с линейным или относительным с усеченным текстом?

Я пытаюсь сделать listview, который выглядит так: alt текст http://pici.se/pictures/hjFksZvLx.jpg

Он имеет две части, левый выровнен по левому краю и содержит два textviews, которые являются однострочными и усеченными. Правая часть также имеет два textviews, но они выровнены по правому краю и имеют постоянный размер. Основная проблема заключается в том, что правая часть не совпадает с правой. Если я использую статическую ширину, чтобы подтолкнуть ее к правой стороне, она работает довольно хорошо, но затем это не выглядит хорошо в ландшафтном режиме.

Я думал, что это должно быть легко сделать. Но это было не так.--5-->

сначала я попытался с Linearlayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/L1"
        android:layout_height="fill_parent"
        android:layout_weight="0.8"
        android:layout_width="0dip">
        <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:lines="1"
            android:ellipsize="end"
            android:scrollHorizontally="true"
            android:text="Long text Long text Long text Long text Long text Long text Long text" />
        <TextView
            android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:lines="1"
            android:ellipsize="end"
            android:scrollHorizontally="true"
            android:text="Short text" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/L2"
        android:layout_gravity="top|right"
        android:layout_height="fill_parent"
        android:layout_weight="0.2"
        android:layout_width="0dip">
        <TextView
            android:id="@+id/text4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="12:12" />
        <TextView
            android:id="@+id/text3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="64%"
            android:layout_gravity="right" />
    </LinearLayout>
</LinearLayout>

я возился со свойством веса, но это, похоже, не помогает. Правая часть вообще не совпадает с правой.

а потом я попробовал с Relativelayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent">
    <TextView
        android:id="@+id/text1"
        android:layout_height="wrap_content"
        android:lines="1"
        android:scrollHorizontally="true"
        android:layout_alignParentTop="true"
        android:text="Long text Long text Long text Long text Long text Long text Long text"
        android:layout_alignParentLeft="true"
        android:ellipsize="end"
        android:layout_width="275dp" />
    <TextView
        android:id="@+id/text2"
        android:layout_height="wrap_content"
        android:lines="1"
        android:ellipsize="end"
        android:scrollHorizontally="true"
        android:text="Long text Long text Long text Long text Long text Long text Long text"
        android:layout_below="@+id/text1"
        android:layout_alignParentLeft="true"
        android:layout_width="275dp" />
    <TextView
        android:id="@+id/text3"
        android:layout_height="wrap_content"
        android:text="12:12"
        android:layout_gravity="right"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@+id/text1"
        android:layout_width="40dp"
        android:layout_alignRight="@+id/text4" />
    <TextView
        android:id="@+id/text4"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="64%"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@+id/text2"
        android:layout_width="40dp" />
</RelativeLayout>

та же проблема здесь, правая часть не выравнивается правильно, и я должен использовать статический размер для android:layout_width, чтобы подтолкнуть его к другой стороне. И если не использовать статический размер, текст начинает обрезать друг друга.

1 ответов


у меня такая же проблема, как и у вас несколько дней назад. Некоторые моменты:

  • я использовал android:singleLine="true" вместо android:lines="1". Честно говоря я не знаю разницы. Я думаю, что один раз устарел.

  • чтобы выровнять по правому краю: android:gravity="right"

  • чтобы избежать перекрытия, я разместил ваши TextViews слева внутри LinearLayout и я добавить android:layout_marginRight="50dp"

мой xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent">

    <LinearLayout android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:layout_marginRight="50dp">

        <TextView
            android:id="@+id/text1"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:scrollHorizontally="true"
            android:layout_alignParentTop="true"
            android:text="Long text Long text Long text Long text Long text Long text Long text"
            android:layout_alignParentLeft="true"
            android:ellipsize="end"
            android:layout_width="275dp" />
        <TextView
            android:id="@+id/text2"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:scrollHorizontally="true"
            android:text="Long text Long text Long text Long text Long text Long text Long text"
            android:layout_below="@+id/text1"
            android:layout_alignParentLeft="true"
            android:layout_width="275dp" />
    </LinearLayout>

    <TextView
        android:id="@+id/text3"
        android:layout_height="wrap_content"
        android:text="12:12"
        android:layout_gravity="right"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@+id/text1"
        android:layout_width="40dp"
        android:layout_alignRight="@+id/text4" />
    <TextView
        android:id="@+id/text4"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="64%"
        android:layout_alignParentRight="true"
        android:gravity="right"
        android:layout_below="@id/text3"
        android:layout_width="40dp" />
</RelativeLayout>

используя android:layout_marginRight="50dp" чтобы избежать перекрытие не кажется правильным выбором, но на данный момент это единственное решение я нашел.