【问题标题】:Off-center alignment of text inside a TextViewTextView 内文本的偏离中心对齐
【发布时间】:2013-01-30 07:15:26
【问题描述】:

我有一个 TextView 的布局/对齐问题,我还没有找到解决方案,也就是说,我想水平对齐 TextView 内偏离中心的文本。

为了提供更多上下文,我有一个并排的 ImageView 和一个 TextView,ImageView 触摸屏幕的左边缘,而 TextView 水平填充屏幕的其余部分,如下所示:

[-img-|-----text-----]

TextView 配置为 singleLine="true" 和 maxLines="1",因此如果它的水平空间太长,它将被截断。我的目标是对齐屏幕中心的文本,而不是 TextView 的中心,因为屏幕上还有其他元素对齐到中心,我需要文本对齐来匹配它。

所以,如果我在 TextView 上使用gravity="center",我会得到上图,但我真正想要的是

[-img-|--text--------]

我尝试将图像和文本放在相对布局中,以便 TextView 实际上接触屏幕的两个边缘,这在对齐方面做了我想要的,除了如果文本足够长,第一个字符将是被图像隐藏,因为 TextView 位于图像视图的后面。

我还尝试了边距、填充和可向左绘制的复合,但文本始终相对于可用空间居中(我认为这是预期的行为)。

是否有人对如何实现这种对齐有任何线索,即相对于与 TextView 不同的组件的中心,可能在运行时以编程方式?提前感谢您提供任何有用的建议。

编辑: 用户 Budius 建议使用向右填充来实现居中对齐,这可行,但会导致长文本在到达 TextView 的右边缘之前被截断,我正在寻找一个避免这种情况的解决方案,即尽可能使用整个可用空间。

【问题讨论】:

  • 您可以使用 FrameLayout 实现此目的,将 textview 作为宽度 = match_parent 和重力 = center 的第一个视图,然后是具有 layout_gravity left 和 wrap_content 宽度的 ImageView。问题在于文本的长度,因为它可能长到足以位于图像下方。希望对您有所帮助。
  • 感谢您的回复,但这种方法似乎等同于我尝试将视图放入 RelativeLayout - 文本隐藏在图像后面的可能性正是我会遇到的问题之一喜欢修复。

标签: android layout textview alignment


【解决方案1】:

尝试使用

   android:layout_weight="1" 

如果对你有帮助的话..

【讨论】:

  • 谢谢,但我不太明白这有什么帮助,也许你能解释一下?
  • 我分享了一个代码,这可能不是一个合适的方式(我知道)。否则 FrameLayout 是我知道解决您的问题的最佳方法..
【解决方案2】:

我相信它将居中并将 20dp 移到一边。

gravity:centrepadding:right=20dp

【讨论】:

  • 谢谢,你说得对,这让我得到了我想要的对齐方式,但结果是,即使右侧有更多空间(由填充消耗),长文本也会被截断,看起来有点奇怪。
  • 我理解这个问题,但我想不出任何“简单”的出路。您可以尝试以编程方式检查文本长度并根据需要删除填充。
【解决方案3】:

我知道这不是正确的方法,但也尝试一下..

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight=".33"
    android:src="@drawable/ic_launcher" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight=".33"
    android:gravity="center"
    android:text="text" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight=".33"
    android:src="@drawable/ic_launcher"
    android:visibility="invisible" />

【讨论】:

  • 感谢代码,它基本上完成了与 Budius 的建议相同的事情,但引入了相同的问题,即长文本不会填满整个可用空间(被不可见的图像占用),但会在到达右边缘之前被截断。
最近更新 更多