【发布时间】:2012-09-27 06:32:26
【问题描述】:
我有一个成功使用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 的子类,并且功能相同,因此您可以以相同的方式实现它们的行为。
所以我所做的是将包含ToggleButtons 的活动布局文件复制到目录res/layout-v14/ 并将ToggleButton 的所有实例替换为Switch。这意味着Android 14及以上版本将使用Switch的布局文件,14以下将使用ToggleButton的布局文件。除了小部件名称之外,每个 XML 都是相同的。
<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.
当我在 ToggeButton。当我在 14 上运行时,Android 小部件框架中出现 null 崩溃。
我下载了 Android 源代码。从崩溃回溯中,我确切地知道崩溃在哪里。 Switch.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 设置为可绘制对象,并且崩溃消失了。
那到底是怎么回事?
为什么我会遇到 null 崩溃?
我是否需要找到默认的Track 和Thumb 可绘制对象,并将它们复制到我的应用中?
我正在尝试做的事情——使用 ToggleButton 和 Switch——不可能吗?
【问题讨论】:
-
查看您的 logcat 回溯错误。它必须引用调用 Switch.java 的代码部分及其第 811 行。我认为这是当您调用
findViewById(R.id.settings_some_option_on_off)时。对吗? -
回溯都是 Android 的东西。我的应用程序内没有框架。在
onCreate()、onStart()和onResume()都成功完成后发生崩溃。 -
我应该补充一下,崩溃发生在活动变得可见/可交互之前。
-
嗯……如果您删除(或评论)有关此按钮的所有 java 内容,以便让 xml(并且只有 xml)显示开关,会发生什么?如果可行,请在每行添加您的 java 代码行,以确定您的代码的哪一部分不起作用。
-
您的活动主题可能有问题。也许您使用的主题没有 switch 样式。我认为您需要为在 v14 及更高版本上运行的应用程序指定主题为 Holo。类似this
标签: android togglebutton android-4.2-jelly-bean