右对齐文本在android TextView

我有一个TextView在我的应用程序。我想让文本向右对齐。我试着补充道:

android:gravity="right"

但这对我没用。

我可能做错了什么?

426012 次浏览

确保你没有使用android:layout_width="wrap_content",如果是这样,那么它将无法设置重力,因为你没有足够的空间来对齐文本。相反,请使用android:layout_width="fill_parent"

我认为你正在这样做:android:layout_width = "wrap_content"
如果是这样,执行:android:layout_width = "match_parent"

android:layout_gravity用于将文本视图与父布局对齐。 android:gravity用于在文本视图中对齐文本

你确定你是在试图将文本视图中的文本向右对齐还是你想要将文本视图本身相对于父布局向右移动,还是你想同时实现这两种目的

一般来说,android:gravity="right"不同于android:layout_gravity="right"

第一个变量影响文本本身在视图中的位置,所以如果你想让它右对齐,那么layout_width=应该是"fill_parent""match_parent"

第二个影响视图在其父视图中的位置,换句话说——在父视图中对齐对象本身(编辑框或文本视图)。

如果它在RelativeLayout中,你可以使用android:layout_toRightOf="@id/<id_of_desired_item>"

如果你想对齐到设备的right角的地方android:layout_alignParentRight="true"

使(LinearLayout) android:layout_width="match_parent"和TextView的android:layout_gravity="right"

更好的解决方案是最简单的解决方案,并且对代码行为的修改较少

如果你只能用TextView上的2个属性来解决这个问题呢?

而不是需要改变你的LinearLayout属性,也许可以改变LinearLayout子的行为?

使用这种方式,你不需要改变LinearLayout的属性和行为,你只需要将以下两个属性添加到你的目标TextView:

android:gravity="right"
android:textAlignment="gravity"

如果只改变你的目标来解决你的问题,而不是有机会在未来引起另一个问题,修改你的目标父亲,会更好吗?想想吧。

尝试将android:gravity="center"添加到TextView

以下是我的工作:

<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sarah" />


<TextView
android:id="@+id/tv_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_username"
android:layout_alignParentEnd="true"
android:layout_toEndOf="@+id/tv_username"
android:text="San Marco"
android:textAlignment="viewEnd" />

请注意第二个TextView的android:layout_alignParentEndandroid:textAlignment设置。

让我用网络来解释重力概念,因为很多开发人员都知道它。

android_layout_gravity表现为float:left|right|top|bottom

android_gravity工作于text_align:centre|left|right

在Android中float是android_layout_gravity, text_align:是android_gravity。

android_layout_gravity相对于parent应用。如android_gravity应用于它的子内容或内部内容。

请注意 android_gravity仅当它的视图为match_parent时(当它有空间居中时)才有效。

我也面临同样的问题,并认为问题正在发生,因为TextView的layout_width是有wrap_content。你需要有layout_width为match_parent和android:gravity = "gravity"

android:gravity="right"

它基本上用于线性布局,所以你必须设置你的宽度的TextView或编辑文本为

android:layout_width = "match_parent"

而且

当你在相对布局中工作时,使用

android:layout_alignParentRight="true"

你可以使用:

    android:layout_alignParentRight="true"
android:layout_centerVertical="true"

这应该可以达到目的

android:textAlignment="textStart"

以下代码片段:

android:textAlignment="textEnd"
android:layout_gravity="end"

对我来说很好

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">


<TextView
android:id="@+id/tct_postpone_hour"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:gravity="center_vertical|center_horizontal"
android:text="1"
android:textSize="24dp" />
</RelativeLayout>

使一号在水平和垂直的中心对齐。

以防还有人需要

android:gravity="end"

在我的例子中,我使用Relative Layout来实现emptyString

在纠结了一个小时之后。只有这个对我有用:

android:layout_toRightOf="@id/welcome"
android:layout_toEndOf="@id/welcome"
android:layout_alignBaseline="@id/welcome"

layout_toRightOflayout_toEndOf都可以,但为了更好地支持它,我两者都用了。

更清楚地说:

这就是我想做的:

enter image description here

这是模拟器的输出

enter image description here

布局:

<TextView
android:id="@+id/welcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="Welcome "
android:textSize="16sp" />
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/welcome"
android:layout_toRightOf="@id/welcome"
android:text="@string/emptyString"
android:textSize="16sp" />

注意:

  1. android:layout_width="wrap_content"作品
  2. Gravity未被使用

在我的例子中,我使用了属性“layout_alignRight”,在文本中:

android:layout_alignRight="@+id/myComponentId"

如果你想添加一些右边框,只需要设置属性“Layout_Margin right”为“20dp”,例如:

android:layout_marginRight="20dp"

校正对齐已从Android API 26+支持TextView

<TextView ...
... android:justificationMode="inter_word" />

缺省情况下,value为none。

Android TextView辩护模式none vs inter_word

Android TextView Docs

Question on Android TextView Justify Text .

试着使用:-

android:justificationMode="inter_word"

这将证明你的短信是正确的。