Android: требуется API для использования Switch?

Я не могу вставить коммутатор в свой проект из-за следующей ошибки:

Для просмотра требуется уровень API 14 (текущий минимум 8):

Но в свойствах моего проекта я использую платформу 4.1 и уровень API 16. Так что же не так?


person Rob    schedule 11.07.2012    source источник
comment
Ознакомьтесь с решением здесь: stackoverflow.com/questions/9920709/   -  person dberm22    schedule 26.03.2013


Ответы (6)


Об этом есть хорошая лекция от 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" />
person suomi35    schedule 15.10.2012
comment
Пожалуйста, предоставьте краткое изложение того, что находится по этой ссылке. Пожалуйста, не требуйте, чтобы мы переходили на другой сайт только для того, чтобы воспользоваться вашим ответом. А что, если другой сайт исчезнет или ссылка порвется? - person John Saunders; 15.10.2012
comment
Коммутатор доступен только для API версии 14 и выше. Итак, я думаю, следует использовать layout-v14 вместо layout-v11? - person Almer; 13.12.2012
comment
Ты прав, Альмер. Switch не был представлен до v14, поэтому следует использовать layout-v14. Хорошо поймал! - person suomi35; 30.12.2012
comment
Ссылка битая, но решение идеальное! Только скажите, что вам нужно использовать CompoundButton в своем классе Java, чтобы управлять как переключателем, так и флажком. Спасибо! - person jbc25; 07.08.2013
comment
Спасибо, jbc25... Google продолжает перемещать свои презентации IO, но я обновил ссылку во второй раз за год. Спасибо, что обратили мое внимание :) - person suomi35; 09.09.2013
comment
Большое спасибо за ссылку и объяснение! - person nolazybits; 09.10.2013
comment
Это бесполезно, если у вас, скажем, 10 коммутаторов, не так ли? Вам нужно будет создать отдельный файл для каждого переключателя/флажка, так как вы не можете установить их атрибуты отдельно таким образом. - person RobinJ; 25.08.2014
comment
@RobinJ: XML-файлы выше могут содержать все, что вы пожелаете. Вы можете добавить столько Switches/CompoundButtons, сколько захотите, и присвоить им любые атрибуты, какие пожелаете. - person suomi35; 10.01.2015

Найдите это в файле AndroidManifest.xml:

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

Измените minSdkVersion на 14.

person azgolfer    schedule 11.07.2012
comment
Спасибо тебе за это ! Я не знал, что это было в Манифесте. - person Rob; 11.07.2012
comment
Обратите внимание, что если вы измените minSdkVersion на 14, ваше приложение будет работать только с телефонами Android 4.0 и выше. Что в настоящее время составляет лишь около 10% всех телефонов Android. - person azgolfer; 11.07.2012
comment
Ну я вижу. Итак, какова лучшая альтернатива Switch? Я думаю, мне придется пойти с CheckBox. - person Rob; 11.07.2012
comment
Если вы хотите ориентироваться на более старые версии Android, возможно, вам придется использовать «ToggleButton». Выглядит не так красиво, как Switch, но зато работает с Android 2.1 и выше. - person azgolfer; 11.07.2012

Для коммутатора требуется 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");
            }
        }
    });

Я надеюсь помочь вам.

person tvtruong    schedule 23.05.2016

Ваш android:minSdkVersion установлен на 8. Это означает, что ваше приложение будет работать на API-8 (2.2.1) и выше, но произойдет сбой, потому что Switch недоступен.

person chrulri    schedule 11.07.2012

Лучшее решение — иметь два разных макета xml в папке макетов и папке layouts-v14 с одинаковыми именами и одинаковым кодом. В layouts его toggleButton/checkboxes, а в layouts-v14 его переключение и динамическая проверка версии API и раздувание соответствующего макета.

person user2185367    schedule 19.03.2013

Посмотрите, есть два способа решить вашу проблему: сначала вы можете изменить minSdkVersion <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/> с 8 на 14 или определить другой макет, содержащий Switch в layout-v14, вы можете вручную создать эту папку в каталоге res

person Irshad Khan    schedule 23.11.2013