KitKat上的button文字消失(API级别19)

我的应用(游戏)的主菜单使用标准的Androidbutton。 除了使用Android 4.4.2的Nexus 7以外,它在我的所有设备上都能正常工作。 问题如下:

在这些情况下,button的文本突然消失:

  • 该button被按下(当我触摸它时立即发生,不需要释放它),
  • 在button上调用setEnabled(boolean)

例如,如果按下“加载游戏”button在按下事件过程中正确突出显示,但“加载游戏”完全消失(button空白文本)。

如果我删除所有的自定义样式和行为,并只使用默认的Android等button,这个问题仍然存在。

如果我将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> 

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

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

Solutions Collecting From Web of "KitKat上的button文字消失(API级别19)"

看着你的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行为,并build议您以自己的方式处理文本颜色。 我坚信,消除这种自定义行为将解决问题。

也许你可以使用“层次视图” – Eclipse中的透视来debugging你的布局? 这是非常有用的,因为您可以在运行时读取测量的布局参数。 至less它应该引导你走向正确的轨道。

我面临同样的问题。 Nexus 7和Nexus 10上的文字消失。

发生错误的情况:

  1. 使用以下布局。
  2. 点击button,将文本设置为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" /> 

要解决这个问题,你可以从TableLayout to LinearLayout切换TableLayout to LinearLayout或者为你的button设置宽度。 这对我来说是有效的。

嗨,我已经testing这与您的自定义样式。 我使用硬编码的颜色,因为我不能使用你使用的文字颜色。 它正在所有设备上工作。 我无法testingnexus 7.因为我没有这个设备。 希望它能在nexus7中工作。 请检查更新的文件,让我知道的反馈。 如果您使用了任何select器,则发布select器文件。

 <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>