android:重力在API 18+上失败

时间:2014-01-29 22:53:15

标签: java android layout gravity

我的应用程序上有一些TextView,我不知道为什么,但android:gravity属性没有将文本内容置于运行API 18+(4.3 +)的设备上。

我在自定义TextView上使用的代码,这是RelativeLayout的子代:

<com.package.custom.CustomTextFont
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/seekbar"
    android:layout_alignParentLeft="true"
    android:layout_alignTop="@+id/seekbar"
    android:layout_marginLeft="@dimen/margin_tiny_double"
    android:layout_toLeftOf="@+id/seekbar"
    android:gravity="center_vertical|left"
    android:paddingRight="@dimen/margin_tiny"
    android:text="@string/text1"
    android:textColor="@color/black"
    android:textSize="@dimen/size_text_normal" />

此代码应该使用此TextView的边缘并将其对齐到顶部和底部并将其放在SeekBar的左侧,这是有效的,但TextView获取很大,所以android:gravity我将文本置于中心位置,并自行离开。它工作,但我不知道为什么,文本不在运行android 4.3和4.4的设备的中心左侧。此问题可以在真实设备上以及Eclipse的布局预览(图形布局)中重现。

API 18+或android:gravity上有哪些更改我不知道?

PS:我正在项目和AndroidManifest.xml

上定位API 19

PS2:我的TextView是自定义的,只是为了设置外部font.tff

这就是它在API 17上的样子 -

enter image description here

这就是它在API 18 +

上的样子

enter image description here

提前致谢!

= UPTADATE =

在我的Manifest上,我将android:targetSdkVersion更改为17而不是19,问题就消失了,但这是一个“技巧”,而不是解决方案,我可以做什么,因为它可能是API的一个问题?是的,我有最新版本的API 18和19(今天,2014年1月30日)。

2 个答案:

答案 0 :(得分:12)

这似乎是API 18 +中的一个已知问题:

https://code.google.com/p/android/issues/detail?id=59368 https://code.google.com/p/android/issues/detail?id=59700

当TextView是可滚动容器(例如ListView)的一部分时,问题似乎发生,使得视图由于某种原因忽略了垂直引力(一些消息来源暗示这与TextView是RelativeLayout的子节点有关,虽然我的经验是即使没有涉及这样的布局也会发生这种情况。)

一种可能的解决方法(虽然不是特别优雅),将TextView包装在LinearLayout中。然后,您可以在TextView上使用“layout_gravity”将其置于LinearLayout内部,而不是依赖于“gravity”(只需确保wrap_content,以便文本本身正确居中)。

例如,在你的例子中:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignBottom="@+id/seekbar"
    android:layout_alignParentLeft="true"
    android:layout_alignTop="@+id/seekbar"
    android:layout_toLeftOf="@+id/seekbar"
    android:layout_marginLeft="@dimen/margin_tiny_double" >

    <com.package.custom.CustomTextFont
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="left"
        android:paddingRight="@dimen/margin_tiny"
        android:text="@string/text1"
        android:textColor="@color/black"
        android:textSize="@dimen/size_text_normal" />

</LinearLayout>

此方法的缺点是在视图层次结构中添加了不必要的级别,但它目前似乎是解决此问题的唯一方法(除了恢复到早期的API级别)。

另见类似问题: Android sdk 18 TextView gravity doesn't work vertically

答案 1 :(得分:1)

您的textview高度为“wrap_content”,这意味着textview的高度将与文本的高度相同。如果将textview的背景更改为黑色,则可能更容易看到视图的边界。我猜你会发现textview的高度没有你想象的那么高。

尝试将textview的高度设置为match_parent。如果需要,您可以将textview包装在另一个视图中,并根据需要修改其高度。