を正常に使用するアプリがあります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
それをディレクトリにコピーして、 のすべてのインスタンスを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 クラッシュが発生します。
Android ソースをダウンロードしました。クラッシュのバックトレースから、クラッシュの場所が正確にわかります。Switch.java:
808 @Override
809 public void jumpDrawablesToCurrentState() {
810 super.jumpDrawablesToCurrentState();
811 mThumbDrawable.jumpToCurrentState(); <------ boom
812 mTrackDrawable.jumpToCurrentState();
813 }
thumb
は の新しいプロパティSwitch
です。それにしても、定義しなくてもいいじゃないですか。必須プロパティとしてリストされていません。
テストとして、-v14 レイアウトに戻って、drawable に設定android:thumb
しました。次に、812 行目で null をヒットしましたtrack
。ドローアブルに設定android:track
すると、クラッシュはなくなりました。どうしたの?
null クラッシュが発生するのはなぜですか?
デフォルトTrack
とThumb
ドローアブルを見つけて、アプリにコピーする必要がありますか?
私がやろうとしていること - ToggleButton と Switch を使用する - は不可能ですか?