2013-03-27 136 views
0

我使用Android 2.2手机创建了一个应用程序。我在活动中有四个切换按钮。我在运行Android 4.2的平板电脑上查看了我的应用程序,并且指示灯不在按钮的底部。Android 4.2无法正确显示切换按钮

incorrectly displayed toggle

我首先想到的是它可能会被截断,所以我所做的按钮高度200dp,但是指示灯仍然不存在。
我也在以编程方式调整宽度,但评论它没有帮助。
切换屏幕在运行Android 2.2的手机上正确显示。

这里是一个按钮的XML:

<ToggleButton 
    android:id="@+id/cat_btn1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView3" 
    android:layout_alignParentLeft="true" 
    android:textSize="12dp" 
    android:onClick="toggleClicked" 
    android:layout_marginLeft="10dp" /> 

我决定创建API 17的另一个项目,有一个单一的切换按钮,它正确地显示,所以我不知道是什么原因造成的问题在我的第一个项目。

第二个项目形象和XML:使用自定义主题时

correctly displayed toggle

<ToggleButton 
    android:id="@+id/toggleButton1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView1" 
    android:layout_marginTop="56dp" 
    android:layout_toRightOf="@+id/textView1" 
    android:text="ToggleButton" /> 
+0

我会在'ToggleButton'上摆脱'onClick' - 请使用'setOnCheckedChangedListener()'来响应'ToggleButton'状态的变化。此外,您的第一个项目是否使用可能会干扰“ToggleButton”样式的自定义主题? – CommonsWare 2013-03-27 14:01:08

+0

我只是使用'Theme.Black.NoTitleBar'。是使用所有按钮上推荐的监听器,还是只是切换? “ – Ryan 2013-03-27 14:02:36

+0

”正在使用所有按钮上推荐的侦听器,或者只是切换?“ - ”ToggleButton“处理它自己的点击事件,就像”CompoundButton“的所有子类一样,因此使用'setOnCheckedChangedListener()'。 – CommonsWare 2013-03-27 14:04:06

回答

2

要小心。在很多情况下,您需要根据API级别从适当的父主题继承,以获得所需的外观。

通过Eclipse的活动创建一个现代化项目将设立风格的资源为你鼓励这样的:

  • res/values/styles.xml定义AppBaseTheme,从-API前的水平11主题继承(例如,Theme.Light

  • res/values-v11/styles.xml覆盖AppBaseThemeHolo主题继承(例如,Theme.Holo.Light

  • res/values-v14/styles.xml可能存在再次重写AppBaseTheme(例如,Theme.Holo.Light.DarkActionBar

  • res/values/styles.xml也有AppTheme,定义为从AppBaseTheme,你在你的清单和这样对于应用的主题(或活动的主题)引用AppTheme继承

AppTheme中放置应在任何API级别上工作的自定义设置。在适当的AppBaseTheme中放入API级别特定的自定义。并且,如果您想要改变一般外观(例如,切换到黑暗/无动作栏),请改变AppBaseTheme继承的主题以适合使用适合该API级别的主题。