我有一个成功使用的应用程序ToggleButton
。我正在转换应用程序以在 JELLY BEAN (4.1.1) 上使用。4.1.1 有Switch
小部件,这是一个更好看的ToggleButton
小部件。这两个小部件都派生自CompoundButton
.
Android的比较文档在这里:
http://developer.android.com/guide/topics/ui/controls/togglebutton.html
它说:
ToggleButton 和 Switch 控件是 CompoundButton 的子类,并且功能相同,因此您可以以相同的方式实现它们的行为。
所以我所做的是获取包含ToggleButton
s 的活动布局文件,将其复制到目录并替换res/layout-v14/
所有实例。这意味着Android 14及以上版本将使用布局文件,14以下将使用布局文件。除了小部件名称之外,每个 XML 都是相同的。ToggleButton
Switch
Switch
ToggleButton
<Switch
android:id="@+id/settings_some_option_on_off"
android:textOn="@string/settings_toggle_on"
android:textOff="@string/settings_toggle_off"
android:gravity="center"
android:paddingRight="@dimen/size_padding_minor"
android:layout_weight="1"
android:layout_gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
在我的 .java 代码中,我CompoundButton
只使用。不使用ToggleButton
或Switch
根本不使用。
private CompoundButton mViewSomeOptionOnOff;
...
mViewSomeOptionOnOff = (CompoundButton) findViewById(R.id.settings_some_option_on_off);
etc.
当我在 < 14 上运行时,效果很好。和之前一样。我得到ToggeButton
. 当我在 14 上运行时,我在 Android 小部件框架中遇到了 null 崩溃。
我下载了安卓源。从崩溃回溯中,我确切地知道崩溃在哪里。开关.java:
808 @Override
809 public void jumpDrawablesToCurrentState() {
810 super.jumpDrawablesToCurrentState();
811 mThumbDrawable.jumpToCurrentState(); <------ boom
812 mTrackDrawable.jumpToCurrentState();
813 }
thumb
是 的新属性Switch
。即便如此,我也不应该定义它,对吧?它没有被列为强制属性。
就像测试一样,回到我的 -v14 布局中,我设置android:thumb
为可绘制对象。然后我在第 812 行点击了 null track
,. 我设置android:track
为可绘制对象,崩溃消失了。发生什么了?
为什么我会遇到空崩溃?
我是否需要找到默认值Track
和Thumb
可绘制对象,并将它们复制到我的应用程序中?
我正在尝试做的事情——使用 ToggleButton 和 Switch——不可能吗?