Android: 右对齐 TextView 且不截断

Android: right align TextView and no truncate

我正在尝试将我的 android:id="@+id/date" TextView 与屏幕右侧对齐。这可行,但问题是当 TextView android:id="@+id/name" 很长时,日期会被截断。例如。而不是 "Mon 1/26",它将显示为 "Mon 1..."。我该如何解决这个问题,以便始终显示完整日期?下面是我的 xml 文件。预先感谢您的帮助!

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/instance_chart"
    style="@style/InstanceChart"
    android:layout_height="40sp"
    android:clickable="false"
    android:focusable="false"
    android:orientation="vertical">

    <com.my.name.chart.ChartView
        android:layout_marginTop="9dp"
        android:id="@+id/chart_view"
        app:barLabelHeight="0sp"
        android:layout_height="30dp"
        style="@style/InstanceChart.Chart" />

<LinearLayout
    android:orientation="horizontal"
    android:weightSum="1"
    style="@style/InstanceChart.Title"
    >

    <TextView
        android:id="@+id/symbol"
        android:layout_width="70sp"
        android:layout_height="match_parent"

        android:singleLine="true"
        android:ellipsize="end"
        android:gravity="left"

        style="@style/InstanceChart.Symbol"
        />

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="match_parent"

        android:layout_weight="1"
        android:gravity="left|center_vertical"

        android:singleLine="true"
        android:ellipsize="end"

        style="@style/InstanceChart.Name"
        />

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

        android:singleLine="true"
        android:ellipsize="marquee"
        android:gravity="right|center_vertical"
        android:textStyle="normal"
        />

</LinearLayout>    
</FrameLayout>

改用此代码。我假设你想要一个 3 文本列布局,第二个尽可能拉伸。

<LinearLayout
    android:orientation="horizontal"
    android:weightSum="1"
    style="@style/InstanceChart.Title"
    >

    <TextView
        android:id="@+id/symbol"
        android:layout_width="70sp"
        android:layout_height="match_parent"

        android:singleLine="true"
        android:ellipsize="end"
        android:gravity="left"

        style="@style/InstanceChart.Symbol"
        />

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"

        android:singleLine="true"
        android:ellipsize="end"

        style="@style/InstanceChart.Name"
        />

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

        android:singleLine="true"
        android:ellipsize="marquee"
        android:gravity="right"
        android:textStyle="normal"
        />

</LinearLayout>

当使用 TextView 时,android:gravity 设置文本对齐方式。但是,android:layout_gravity 在其容器中设置了 TextView 的重力。

此处您使用的是水平对齐方式 LinearLayout,因此您无法将水平对齐方式应用于其所有子元素。例如,在 TextView 上设置 android:layout_gravity="left" 将不起作用。

简单修复...最后一个 textView 应该是

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

        android:ellipsize="none"
        android:singleLine="true"
        android:gravity="right|center_vertical"
        android:textStyle="normal"
        />