Я не могу вставить коммутатор в свой проект из-за следующей ошибки:
Для просмотра требуется уровень API 14 (текущий минимум 8):
Но в свойствах моего проекта я использую платформу 4.1 и уровень API 16. Так что же не так?
Я не могу вставить коммутатор в свой проект из-за следующей ошибки:
Для просмотра требуется уровень API 14 (текущий минимум 8):
Но в свойствах моего проекта я использую платформу 4.1 и уровень API 16. Так что же не так?
Об этом есть хорошая лекция от Google IO 2012 (начиная со слайда 32)
Вот подробный пример:
Создайте отдельный XML-файл макета для версий ICS+, поместив его в /res/layout-v14. Результирующая файловая структура будет выглядеть примерно так:
res/layout
- mainlayout.xml
- compound_button.xml
res/layout-v14
- compound_button.xml
Затем Android будет искать ресурсы в каталоге layout-v14, когда ваше приложение работает на версии v14 или выше.
Поместите включение в mainlayout.xml, которое будет извлекать соответствующий файл component_button.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.
Для коммутатора требуется 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");
}
}
});
Я надеюсь помочь вам.
Ваш android:minSdkVersion
установлен на 8. Это означает, что ваше приложение будет работать на API-8 (2.2.1) и выше, но произойдет сбой, потому что Switch недоступен.
Лучшее решение — иметь два разных макета xml в папке макетов и папке layouts-v14 с одинаковыми именами и одинаковым кодом. В layouts его toggleButton/checkboxes, а в layouts-v14 его переключение и динамическая проверка версии API и раздувание соответствующего макета.
Посмотрите, есть два способа решить вашу проблему: сначала вы можете изменить minSdkVersion <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>
с 8 на 14 или определить другой макет, содержащий Switch в layout-v14, вы можете вручную создать эту папку в каталоге res