无法垂直居中 textview 的文本
Posted
技术标签:
【中文标题】无法垂直居中 textview 的文本【英文标题】:Can´t center textview´s text vertically 【发布时间】:2013-09-14 11:19:02 【问题描述】:[已解决] 我必须在 ScrollView 中添加 android:fillViewport="true"
,这解决了文本不垂直居中的问题。
我知道这已经回答过很多次了,但我仍然无法将 textview 的文本垂直居中。
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView"
android:layout_
android:layout_>
<RelativeLayout
android:id="@+id/relativelayout"
android:layout_
android:layout_>
<ImageView
android:id="@+id/icon"
android:layout_
android:layout_
android:src="@drawable/picture" />
<TextView
android:id="@+id/title"
android:layout_
android:layout_
android:layout_toRightOf="@+id/icon"
android:gravity="center_vertical"
android:layout_alignBottom="@+id/icon"
android:layout_alignTop="@+id/icon"
android:text="@string/title_text"
android:textSize="@dimen/textsize"
android:textStyle="bold"
android:textColor="@color/color"
android:shadowColor="@color/shadow"
android:shadowRadius="5"/>
</RelativeLayout>
</ScrollView>
通常这应该适用于
android:gravity="center_vertical"
但它对文本视图没有影响...
奇怪的是,我有第二个应用程序,它的代码完全相同,而且它在那里运行没有任何问题。
/编辑
为了澄清我的问题: 这就是我现在拥有的: 这就是我想要的:
【问题讨论】:
由于高度上没有多余的空间,android:gravity 没有空间将文本居中,将 android:gravity 更改为 android:layout_gravity 为什么你有android:layout_alignBottom="@+id/icon"
android:layout_alignTop="@+id/icon"
作为xml文件的一部分?如果您希望TextView
居中对齐,那应该是唯一的属性。
因为我认为我可以轻松地将文本垂直居中在 textview 中。
【参考方案1】:
要达到你想要的结果,去掉就够了
android:gravity="center_vertical"
android:layout_alignBottom="@+id/icon"
android:layout_alignTop="@+id/icon"
并添加
android:layout_centerVertical="true"
改为。
【讨论】:
这只是为我将文本视图集中在屏幕上,这不是我想要做的(请查看原始问题中 /edit 之后的 2 个示例) 不,这将使 TextView 在您的相对布局中居中,高度为wrap_content
,因此它会包裹您的 ImageView 并在此容器中垂直写入 android:layout_centerVertical="true"
定位 TextView,这有点像您想要的。跨度>
不,这不是我想要的。我不想在相对布局中将 textview 居中。这就是我想要的:i.imgur.com/9T8CyT6.png 这就是我现在拥有的:i.imgur.com/WwHCegq.png
在这种情况下,只需添加另一个将只包含 ImageView 和 TextView 的 RelativeLayout ;)【参考方案2】:
android:gravity 指定父级将如何定位其子级。在这种情况下,父级是 TextView,子级是该视图中的实际文本。如果 TextView(父)不比文本(子)宽,那么重力将不起作用。
供参考的 android:gravity 文档:
指定如何通过视图的 x 轴和/或 y 轴对齐文本 文本小于视图。
像这样设置 TextView 的宽度:
android:layout_
这应该会导致文本垂直居中。
【讨论】:
好吧,但是由于我使用的是android:layout_alignBottom="@+id/icon"
& android:layout_alignTop="@+id/icon"
,所以 textview 不应该和 imageview 一样高吗?另外,我想将文本垂直居中,而不是水平居中【参考方案3】:
当您使用相对布局时,您可以添加到您的 TextView:
`android:layout_centerVertical="true"`
【讨论】:
但你也应该在添加之前消除 android:layout_alignBottom="@+id/icon" android:layout_alignTop="@+id/icon" : android:layout_centerVertical="true" 我已经测试过了,它对我有用 这只是为我将文本视图集中在屏幕上,这不是我想要做的(查看原始问题中 /edit 之后的 2 个示例) @f4bzen 请尝试在您的描述中更具体,以便我们为您提供帮助 请看原问题中的编辑:这就是我现在拥有的:i.imgur.com/WwHCegq.png这就是我想要的:i.imgur.com/9T8CyT6.png【参考方案4】:如果您只关心您的文本本身,一个可行的解决方案(以上所有方法都不起作用)是使 textView 与 imageView 一样高(通过将其对齐到顶部没有边距,底部到 id “其他视图”),然后在此文本框中使用 android:gravity="center"(确保没有其他对齐方式干扰此重力)
【讨论】:
【参考方案5】:用这段代码替换你的TextView,它会正常工作
<TextView
android:id="@+id/title"
android:layout_
android:layout_
android:layout_alignBottom="@+id/icon"
android:layout_alignParentTop="true"
android:layout_alignTop="@+id/icon"
android:layout_toRightOf="@+id/icon"
android:shadowColor="@color/shadow"
android:shadowRadius="5"
android:text="@string/title_text"
android:textColor="@color/color"
android:textSize="@dimen/textsize"
android:textStyle="bold" />
【讨论】:
这只是为我将文本视图集中在屏幕上,这不是我想要做的(请查看原始问题中 /edit 之后的 2 个示例) 你需要进一步澄清你的问题,你可以考虑这个官方文档。 developer.android.com/guide/topics/ui/layout/relative.html 请查看我在原始问题中的编辑:这就是我现在拥有的:i.imgur.com/WwHCegq.png 这就是我想要的:i.imgur.com/9T8CyT6.png 我已经用这个替换了 TextView,我添加了 android:layout_alignParentTop="true" 以使其位于相对布局的顶部 遗憾的是这并没有解决它,但我有点能够修复自己:我不得不将android:fillViewport="true"
添加到 ScrollView 并且我的 TextView 中的文本现在完美居中,即使我的自己的代码。【参考方案6】:
我认为您可以尝试以下方法之一:
-
在TextView中,设置android:layout_centerVertical="true"
或
-
作为第一个答案,但我认为应该是 android:layout_
我猜为什么你在第二个应用程序中的代码有效,也许图像的高度等于 textView
【讨论】:
两个应用程序中的图像是文本(视图)的两倍多,所以这不应该是问题。唯一的区别是,第一个是用 eclipse 创建的,第二个是用 android studio 创建的。正如其他答案中提到的那样,android:layout_height="match_parent"
didn´t 工作得很好。
对不起,我之前专注于你的代码。您可以尝试将 TextView 高度设置为 android:layout_ 而不是 "wrap_content" 吗?我认为 wrap_content 高度与 alignTop 和 Bottom 冲突【参考方案7】:
对于遇到此问题的其他人,api 18 后的相对布局中存在错误,请参阅https://code.google.com/p/android/issues/detail?id=59368
一个对我有用的解决方法是用这段代码替换我的相对布局(在上面的链接中找到)
免责声明:这只适用于一种特定情况。它在另一个方面失败了。如果你愿意,请随意尝试
public class FixRelativeLayoutBug extends RelativeLayout
public FixRelativeLayoutBug(Context context)
super(context);
public FixRelativeLayoutBug(Context context, AttributeSet attrs)
super(context, attrs);
public FixRelativeLayoutBug(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);
private static final int AT_MOST_UNSPECIFIED = MeasureSpec.makeMeasureSpec((1<<30)-1, MeasureSpec.AT_MOST);
@Override
protected void onMeasure(int widthSpec, int heightSpec)
// RelativeLayout has bugs when measured in UNSPECIFIED height mode that were supposedly fixed
// in API 18. However the 'fix' does not work with breaks gravity == center_vertical in TextView.
// https://code.google.com/p/android/issues/detail?id=63673
if (MeasureSpec.getMode(heightSpec) == MeasureSpec.UNSPECIFIED) heightSpec = AT_MOST_UNSPECIFIED;
super.onMeasure(widthSpec, heightSpec);
【讨论】:
【参考方案8】:要在 TextView 的范围内精确地垂直居中文本,您可以使用:
android:gravity="center_vertical"
如果您仍然有一个小的错位,其中文本看起来不是完全垂直居中,这可能取决于您的字体填充。试试:
android:includeFontPadding="false"
字体填充有时会使文本稍微偏离中心,这样会有所帮助。
【讨论】:
以上是关于无法垂直居中 textview 的文本的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 的 Textview 中以编程方式居中文本
在 LinearLayout 中将 TextView 调整为垂直居中(水平)