次のエラーのため、プロジェクトにスイッチを挿入できません。
ビューにはAPIレベル14が必要です(現在の最小値は8です):
しかし、私のプロジェクトプロパティでは、プラットフォーム4.1とAPIレベル16を使用しています。では、何が問題になっていますか?
Google IO 2012(スライド32から開始) からこれについての素晴らしい講義があります
詳細な例を次に示します。
/ res/layout-v14に配置して、ICS +バージョン用の個別のレイアウトXMLファイルを作成します。結果のファイル構造は次のようになります。
res/layout
- mainlayout.xml
- compound_button.xml
res/layout-v14
- compound_button.xml
アプリがv14以降で実行されている場合、Androidはlayout-v14ディレクトリでリソースを検索します。
アプリの実行時に関連するcompound_button.xmlをプルするインクルードをmainlayout.xmlに配置します。
<include layout="@layout/compound_button" />
4.0より前のレイアウトでは、チェックボックスが必要なので、次のようにマージとして/layout/compound_button.xmlを作成します。
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="match_parent" Android:layout_height="match_parent" >
<CheckBox
Android:id="@+id/enabled"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Enable" />
</merge>
そして、4.0以降のレイアウトではスイッチが必要なので、次のようにマージとして/layout-v14/compound_button.xmlを作成します。
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android" xmlns:tools="http://schemas.Android.com/tools" Android:layout_width="match_parent" Android:layout_height="match_parent" >
<Switch
Android:id="@+id/enabled"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Enable"
tools:ignore="NewApi" />
</merge>
もちろん、最小値と目標を適切に設定してください。
<uses-sdk Android:minSdkVersion="7" Android:targetSdkVersion="14" />
AndroidManifest.xmlファイルでこれを探します。
<uses-sdk Android:minSdkVersion="8" Android:targetSdkVersion="16"/>
MinSdkVersionを14に変更します。
スイッチにはAPI14が必要です。古いバージョンの場合は、SwithCompatを使用してください。
<Android.support.v7.widget.SwitchCompat
Android:id="@+id/switch_compat"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:checked="true"
Android:textOff="OFF"
Android:textOn="ON"
app:showText="false"
Android:focusable="false"
Android:focusableInTouchMode="false"/>
setOnCheckedChangeListenerの場合:
witchCompat switchCompat = (SwitchCompat)convertView.findViewById(R.id.switch_compat);
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
textView.setText("check");
} else {
textView.setText("unCheck");
}
}
});
お役に立てば幸いです。
より良い解決策は、layoutsフォルダーとlayouts-v14フォルダーに同じ名前と同じコードの2つの異なるxmlレイアウトを配置することです。レイアウトでは、toggleButton /チェックボックスとlayouts-v14でスイッチを切り替え、APIバージョンを動的にチェックして、それぞれのレイアウトを拡張します。
君の Android:minSdkVersion
は8に設定されます。これは、アプリがAPI-8(2.2.1)以降で実行されることを意味しますが、スイッチが使用できないためにクラッシュします。
MinSdkVersion <uses-sdk Android:minSdkVersion="8" Android:targetSdkVersion="16"/>
を8から14に変更するか、layout-v14にSwitchを含む別のレイアウトを定義するかのいずれかで、最初に問題を解決する2つの方法があります。resディレクトリにこのフォルダーを手動で作成できます。