【问题标题】:Vertically aligning suffix with tab space in android TextView在android TextView中垂直对齐后缀与制表符空间
【发布时间】:2015-08-05 06:12:48
【问题描述】:

我有一排(水平的LinearLayout),末尾有一个TextView,显示时间。这是它的外观:

现在我需要将所有行中的后缀 (am/pm) 垂直对齐。上面的布局不是这样,可以看到,最后一行因为显示的时间比较长而错位了。

我使用制表符 \u0009 实现了这一点。这意味着我会将文本设置为例如“7:21\u0009\u0009pm”。这会产生如下所示的预期结果:

但是,我需要知道(1) 这是否是最有效的方式 以及(2) 这是否适用于所有安卓设备。如果有其他方法可以实现这一点,请告诉我。

这里是一行的 XML 布局供您参考:

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/prayer_time_row_height"
            android:layout_marginLeft="48dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <com.devspark.robototextview.widget.RobotoTextView
                style="@style/text_subhead"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Today"
                android:textColor="@color/material_light_secondary_text"
                android:visibility="invisible" />

            <com.devspark.robototextview.widget.RobotoTextView
                style="@style/text_subhead"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Event"
                android:textColor="@color/material_light_primary_text" />

            <com.devspark.robototextview.widget.RobotoTextView
                style="@style/text_subhead"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="12:06\u0009\u0009am"
                android:textColor="@color/material_light_primary_text" />

        </LinearLayout>

奖金

指出垂直对齐小时-分钟分隔符(即冒号字符)的方法的奖励积分。

【问题讨论】:

    标签: android textview vertical-alignment


    【解决方案1】:

    也许使用标签是最有效的,但差距相当大且不可配置。如果您需要单个视图组中的所有这些行,您可以尝试查看 RelativeLayout:在公共左侧垂直对齐 am/pm,并将小时放在左侧和基线上。这是最灵活的方式,因为您可以控制相对位置和边距,但在计算方面效率较低,因为它需要在布局元素时进行额外计算。

    根据对齐冒号 - 在大多数字体(不仅仅是等宽字体)中,数字被设计为占用相等的空间,所以只需对齐右侧的数字(例如在相对布局中)就可以了。

    【讨论】:

    • P.S.如果您分别需要这些条目(例如在 ListView 中),那么最好的方法可能是将数字和 am/pm 标签分别放置在水平线性布局中,layout_width=0 和 layout_weight 都是您选择的——这样每个列将在所有行中具有固定宽度
    【解决方案2】:

    您可以使用 2 列的表格布局。第一列是没有 AM/PM 的时间,第二列只是 AM/PM。将第一列的重力设置为“end”或“right”,如果您使用的是固定宽度的字体,时间将在冒号处排列。

    【讨论】:

      【解决方案3】:

      对于冒号字符,您可以尝试使用字符“\uee01”而不是“:”。这就是谷歌在锁定屏幕上对时钟所做的事情。

      https://github.com/android/platform_frameworks_base/blob/master/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java#L247

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        相关资源
        最近更新 更多