KitKat上的按钮文本消失(API级别19)

时间:2014-05-11 03:57:20

标签: java android button android-4.4-kitkat

我的应用程序(游戏)的主菜单使用标准的Android按钮。除了 Nexus 7 with Android 4.4.2 之外,它在我的所有设备上都能正常使用。问题如下:

在任何一种情况下,按钮的文字都会突然消失:

  • 按下按钮(当我触摸它时会立即发生,无需释放它),
  • setEnabled(boolean)在按钮
  • 上调用

例如,如果我按下“加载游戏”,按下按钮会在按下事件期间正确突出显示,但“加载游戏”会完全消失(按钮有空文本)。

如果我删除所有自定义样式和行为,并且只使用默认字体等默认Android按钮,则问题仍然存在。

如果我将targetSdkVersion降低到18(从19开始),即使在Nexus 7上也能正常工作。

知道KitKat在这方面有什么变化吗?我没有发现任何可疑之处。

我的revalant XML代码:

<TableLayout
    android:id="@+id/layoutGameMainmenu"
    android:layout_width="wrap_content"
    android:layout_height="83dip"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:orientation="vertical"
    android:gravity="center_vertical"
    android:visibility="gone" >

    <TableRow>

        <Button
            android:id="@+id/buttonLoadGame"
            android:layout_width="174dip"
            android:layout_height="40dip"
            android:layout_marginBottom="2dip"
            android:layout_marginRight="30dip"
            android:background="@drawable/button_gamemainmenu"
            android:text="buttonLoadGame"
            android:textColor="@color/button_gamemainmenu_text"
            android:textScaleX="0.9"
            android:textSize="16dp" />

        <Button
            android:id="@+id/buttonSettings"
            android:layout_width="174dip"
            android:layout_height="40dip"
            android:layout_marginBottom="2dip"
            android:layout_marginLeft="30dip"
            android:background="@drawable/button_gamemainmenu"
            android:text="buttonSettings"
            android:textColor="@color/button_gamemainmenu_text"
            android:textScaleX="0.9"
            android:textSize="16dp" />
    </TableRow>

    <TableRow>

        <Button
            android:id="@+id/buttonStartGame"
            android:layout_width="174dip"
            android:layout_height="40dip"
            android:layout_marginBottom="1dip"
            android:layout_marginRight="30dip"
            android:background="@drawable/button_gamemainmenu"
            android:text="buttonStartGame"
            android:textColor="@color/button_gamemainmenu_text"
            android:textScaleX="0.9"
            android:textSize="16dp" />

        <Button
            android:id="@+id/buttonQuit"
            android:layout_width="174dip"
            android:layout_height="40dip"
            android:layout_marginBottom="1dip"
            android:layout_marginLeft="30dip"
            android:background="@drawable/button_gamemainmenu"
            android:text="buttonQuit"
            android:textColor="@color/button_gamemainmenu_text"
            android:textScaleX="0.9"
            android:textSize="16dp" />
    </TableRow>
</TableLayout>

有关上述代码的重要说明:

  • 游戏有一个两排主菜单(每行有两个按钮,总共有4个按钮),这个主菜单位于屏幕的底部
  • 文字文本只是占位符,因为游戏有自己的文本文件格式,并在创建活动时从那里读取数据
  • 即使我完全删除android:textColorandroid:background属性,问题仍然存在。在这种情况下,我的按钮将具有默认外观(而不是他们的游戏特定样式),但问题仍然存在。
  • 再次强调:上述代码适用于除Nexus 7之外的所有(已测试)设备(除了Nexus 7之外的所有设备都是pre-KitKat设备)

最后,有关我的全局样式/主题的一些信息:

在AndroidManifest中,我将Application主题设置为MyCustomThememycustomtheme.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyCustomTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
    <item name="android:soundEffectsEnabled">false</item>
</style>
</resources>

最后,我的styles.xml如下(但似乎我没有从任何地方引用它的样式,这似乎是我们制作游戏全屏时的旧代码,或Android是否在任何地方使用它默认):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme" parent="android:Theme">
    </style>

    <style name="Theme.TranslucentWoTitle" parent="android:Theme.Translucent">
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

4 个答案:

答案 0 :(得分:6)

查看您的XML文件,我仍然认为您的项目出现了问题。


此最小示例不会在Nexus 7 2013 4.4.2(minSDK=8targetSDK=19)上重现问题:

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

    <Button
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

获取XML并删除背景/文本颜色也不会重现它:

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

    <TableLayout
        android:id="@+id/layoutGameMainmenu"
        android:layout_width="wrap_content"
        android:layout_height="83dip"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:orientation="vertical"
        android:gravity="center_vertical">

        <TableRow>

            <Button
                android:id="@+id/buttonLoadGame"
                android:layout_width="174dip"
                android:layout_height="40dip"
                android:layout_marginBottom="2dip"
                android:layout_marginRight="30dip"
                android:text="buttonLoadGame"
                android:textScaleX="0.9"
                android:textSize="16dp" />

            <Button
                android:id="@+id/buttonSettings"
                android:layout_width="174dip"
                android:layout_height="40dip"
                android:layout_marginBottom="2dip"
                android:layout_marginLeft="30dip"
                android:text="buttonSettings"
                android:textScaleX="0.9"
                android:textSize="16dp" />
        </TableRow>

        <TableRow>

            <Button
                android:id="@+id/buttonStartGame"
                android:layout_width="174dip"
                android:layout_height="40dip"
                android:layout_marginBottom="1dip"
                android:layout_marginRight="30dip"
                android:text="buttonStartGame"
                android:textScaleX="0.9"
                android:textSize="16dp" />

            <Button
                android:id="@+id/buttonQuit"
                android:layout_width="174dip"
                android:layout_height="40dip"
                android:layout_marginBottom="1dip"
                android:layout_marginLeft="30dip"
                android:text="buttonQuit"
                android:textScaleX="0.9"
                android:textSize="16dp" />
        </TableRow>
    </TableLayout>

</RelativeLayout>

最后,我注意到android:textColor="button_gamemainmenu_text",这不是默认的Android行为,并建议您以自己的方式处理文字颜色。我坚信删除这种自定义行为可以解决问题。

答案 1 :(得分:3)

也许你可以使用“Hierarchy View” - Eclipse中的Perspective来调试你的布局获得一些新的见解?它非常有用,因为您可以在运行时读取测量的布局参数。至少它应该引导你走上正确的轨道。

答案 2 :(得分:2)

我遇到了同样的问题。 Nexus 7&amp; S上的文字消失了。 Nexus 10。

发生错误的场景:

  1. 使用以下布局。
  2. 单击按钮将文本设置为textView。

    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" >
    
        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
    
            <Button
                android:id="@+id/button1"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="Record"
                android:textColor="@android:color/black" />
        </TableRow>
    </TableLayout>
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="TextView" />
    

  3. 要解决此问题,您可以从TableLayout to LinearLayout或 设置按钮的宽度。这对我有用。

答案 3 :(得分:1)

您好我已经使用您的自定义样式进行了测试。我使用了硬编码颜色,因为我无法使用您使用的文本颜色。它适用于所有设备。我无法在nexus 7上测试它。因为我没有这个设备。希望它能在nexus7中运行。请检查更新的文件,并让我知道反馈。如果您使用过任何选择器,则发布选择器文件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#cccccc"
android:orientation="vertical" >

<TableLayout
    android:id="@+id/layoutGameMainmenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:padding="5dp"
    android:visibility="visible" >

    <TableRow>

        <Button
            android:id="@+id/buttonLoadGame"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:layout_marginBottom="2dip"
            android:layout_marginRight="30dip"
            android:text="buttonLoadGame"
            android:textColor="#000000"
            android:textScaleX="0.9"
            android:textSize="16sp" />

        <Button
            android:id="@+id/buttonSettings"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:layout_marginBottom="2dip"
            android:layout_marginLeft="30dip"
            android:text="buttonSettings"
            android:textColor="#000000"
            android:textScaleX="0.9"
            android:textSize="16sp" />
    </TableRow>

    <TableRow>

        <Button
            android:id="@+id/buttonStartGame"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:layout_marginBottom="1dip"
            android:layout_marginRight="30dip"
            android:text="buttonStartGame"
            android:textColor="#000000"
            android:textScaleX="0.9"
            android:textSize="16sp" />

        <Button
            android:id="@+id/buttonQuit"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:layout_marginBottom="1dip"
            android:layout_marginLeft="30dip"
            android:text="buttonQuit"
            android:textColor="#000000"
            android:textScaleX="0.9"
            android:textSize="16sp" />
    </TableRow>
</TableLayout>