web-dev-qa-db-ja.com

Android:Switchを使用するために必要なAPI?

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

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

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

15
Rob

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" />
74
suomi35

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

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

MinSdkVersionを14に変更します。

5
azgolfer

スイッチには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");
            }
        }
    });

お役に立てば幸いです。

3
tvtruong

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

1
user2185367

君の Android:minSdkVersionは8に設定されます。これは、アプリがAPI-8(2.2.1)以降で実行されることを意味しますが、スイッチが使用できないためにクラッシュします。

1
chrulri

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

0
Irshad Khan