android:重力在API 18+上失败

Mur*_*ira 5 java layout android gravity

我的应用程序上有一些TextViews,我不知道为什么但是该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" />
Run Code Online (Sandbox Code Playgroud)

这个代码应该采用这个代码的边缘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上的样子 -

在此输入图像描述

这就是它在API 18+上的样子

在此输入图像描述

提前致谢!

= UPTADATE =

在我的Manifest上,我将其更改android:targetSdkVersion为17而不是19并且问题消失了,但这是一个"技巧",而不是解决方案,我能做什么,因为它可能是来自API的问题?是的,我有最新版本的API 18和19(今天,01/30/2014).

Tom*_*mty 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>
Run Code Online (Sandbox Code Playgroud)

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

另请参阅类似的问题: Android sdk 18 TextView重力不能垂直工作