次のエラーのため、プロジェクトにスイッチを挿入できません。
ビューにはAPIレベル14が必要です(現在の最小値は8です):
しかし、私のプロジェクトプロパティでは、プラットフォーム4.1とAPIレベル16を使用しています。では、何が問題になっていますか?
次のエラーのため、プロジェクトにスイッチを挿入できません。
ビューには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 に変更します。
Switch には API 14 が必要です。古いバージョンの場合は、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バージョンを動的にチェックし、それぞれのレイアウトを拡張します。
Your android:minSdkVersion
is set to 8. これは、アプリが API-8 (2.2.1) 以降で実行されることを意味しますが、Switch が使用できないためクラッシュします。
最初に問題を解決する方法が 2 つあります <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>
。minSdkVersion を 8 から 14 に変更するか、layout-v14 で Switch を含む別のレイアウトを定義します。res ディレクトリにこのフォルダーを手動で作成できます。