[解决]我不得不将android:fillViewport="true"
添加到ScrollView,修复了问题,文本没有垂直居中。
我知道之前已经多次回答,但我仍然无法垂直居中查看textview文本。
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/relativelayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icon"
android:layout_width="@dimen/icon_width"
android:layout_height="@dimen/icon_height"
android:src="@drawable/picture" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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"
但它对textview没有影响...
奇怪的是,我有第二个应用程序使用完全相同的代码,并且它在那里工作没有任何问题。
/编辑
澄清我的问题:
这就是我现在所拥有的:
这就是我想要的:
答案 0 :(得分:7)
为了达到你想要的效果,删除
就足够了android:gravity="center_vertical"
android:layout_alignBottom="@+id/icon"
android:layout_alignTop="@+id/icon"
并添加
android:layout_centerVertical="true"
代替。
答案 1 :(得分:1)
android:gravity指定父母如何定位其子女。在这种情况下,父级是TextView,子级是该视图中的实际文本。如果TextView(父级)不比文本(子级)宽,则重力将不起作用。
android:gravity docs供参考:
指定如何在视图的x轴和/或y轴上对齐文本 文本小于视图。
设置TextView的宽度,如下所示:
android:layout_width="match_parent"
这应该使文本垂直居中。
答案 2 :(得分:1)
当您使用相对布局时,可以添加到TextView:
`android:layout_centerVertical="true"`
答案 3 :(得分:1)
使用此代码替换TextView,它将正常工作
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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" />
答案 4 :(得分:1)
如果您只关心文本本身,那么可以使用的一个解决方案(以上所有内容)是使textView与imageView一样高(通过将其对齐到顶部而没有边距和底部)到&#34;其他视图&#34;)然后使用android:gravity =&#34; center&#34;在此文本框中(确保没有其他对齐干扰此重力)
答案 5 :(得分:0)
我认为您可以尝试以下方法之一:
或
为什么第二个应用程序中的代码可以工作,我想,也许图像的高度等于textView
答案 6 :(得分:0)
对于有此问题的其他人,在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);
}
}