15

次のエラーのため、プロジェクトにスイッチを挿入できません。

ビューにはAPIレベル14が必要です(現在の最小値は8です):

しかし、私のプロジェクトプロパティでは、プラットフォーム4.1とAPIレベル16を使用しています。では、何が問題になっていますか?

4

6 に答える 6

74

これについては、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" />
于 2012-10-15T18:50:12.307 に答える
5

AndroidManifest.xml ファイルでこれを探します。

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>

minSdkVersion を 14 に変更します。

于 2012-07-11T14:36:39.347 に答える
3

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");
            }
        }
    });

お役に立てれば幸いです。

于 2016-05-23T08:53:37.800 に答える
1

より良い解決策は、layoutsフォルダーとlayouts-v14フォルダーに同じ名前と同じコードを持つ2つの異なるxmlレイアウトを用意することです。レイアウトでは、toggleButton /チェックボックスとlayouts-v14では、スイッチを使用してapiバージョンを動的にチェックし、それぞれのレイアウトを拡張します。

于 2013-03-19T07:03:34.183 に答える
1

Your android:minSdkVersionis set to 8. これは、アプリが API-8 (2.2.1) 以降で実行されることを意味しますが、Switch が使用できないためクラッシュします。

于 2012-07-11T14:37:30.607 に答える
0

最初に問題を解決する方法が 2 つあります <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>。minSdkVersion を 8 から 14 に変更するか、layout-v14 で Switch を含む別のレイアウトを定義します。res ディレクトリにこのフォルダーを手動で作成できます。

于 2013-11-23T17:38:02.243 に答える