2012-07-11 9 views
15

nie mogę wstawić przełącznik w moim projekcie z powodu następującego błędu:Android: Wymagany interfejs API do przełączania?

Zobacz wymaga poziom 14 API (obecny jest 8 min):

ale w moim właściwości projektu, używam Platforma 4.1 i poziom API 16. Co jest nie tak?

+0

Sprawdź rozwiązanie tutaj: http://stackoverflow.com/questions/9920709/use-android-4-0-styled-toggle-button/15640365#15640365 – dberm22

Odpowiedz

74

jest miły wykład na ten temat z Google IO 2012 (starting at slide 32)

tu s szczegółowy przykład:

Utwórz osobny plik XML układu dla wersji ICS +, umieszczając go w/res/layout-v14. Uzyskana struktura pliku będzie wyglądać następująco:

res/layout 
- mainlayout.xml 
- compound_button.xml 
res/layout-v14 
- compound_button.xml 

Android będzie wtedy szukać zasobów w katalogu layout-v14, gdy aplikacja jest uruchomiona na V14 lub wyższa.

Umieść to w mainlayout.xml że będzie ciągnąć w odnośnym compound_button.xml gdy aplikacja jest prowadzony:

<include layout="@layout/compound_button" /> 

dla pre 4,0 układ Chcemy wyboru, więc tworzenie/Układ/compound_button. xml jako seryjnej następująco:

<?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> 

a następnie przez układ 4.0+ chcemy przełącznika, więc utworzyć /layout-v14/compound_button.xml jako seryjnej następująco:

<?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> 

Oczywiście, należy pamiętać, aby ustawić minimalną i cele odpowiednio:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" /> 
+0

Podaj podsumowanie tego, co jest pod tym linkiem. Prosimy nie wymagać od nas przechodzenia do innej witryny tylko po to, aby skorzystać z Twojej odpowiedzi. A co, jeśli druga witryna zniknie lub link się zepsuje? –

+0

Przełącznik jest dostępny tylko z wersji API v14 i wyższej. Zgaduję więc, że zamiast v11 powinien być użyty layout-v14? – Almer

+0

Masz rację, Almer. Przełącznik nie został wprowadzony przed wersją v14, więc należy użyć layout-v14. Dobry chwyt! – suomi35

5

Spójrz na to w pliku AndroidManifest.xml:

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

Zmień minSdkVersion do 14.

+0

Dziękuję za to! Nie wiedziałem, że to było w Manifeście. – Rob

+1

Pamiętaj, że jeśli zmienisz minSdkVersion na 14, Twoja aplikacja będzie działać tylko z telefonami z Androidem 4.0 lub nowszym. Co stanowi obecnie tylko około 10% wszystkich telefonów z Androidem. – azgolfer

+0

Cóż, widzę. Jaka jest najlepsza alternatywa dla Switch? Myślę, że będę musiał pójść z CheckBox. – Rob

1

Twój android:minSdkVersion jest ustawiony do 8. Oznacza to, aplikacja będzie działać na API-8 (2.2. 1) i powyżej, ale będzie to z powodu awarii przełącznika nie jest dostępny

1

Lepszym rozwiązaniem jest posiadanie dwóch różnych układów XML w folderze i folder układy układy-v14 z tymi samymi nazwami i tego samego kodu. W układach jego toggleButton/checkboxes i in layouts-v14 przełącza się i dynamicznie sprawdza wersję api i nadmuchuje odpowiedni układ.

0

Look istnieją dwa sposoby rozwiązania problemu najpierw albo zmienisz minSdkVersion <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/> od 8 do 14 lub zdefiniować inny układ zawierający przełącznik w układzie-V14 można tworzyć ręcznie ten folder w katalogu res

3

Przełącznik wymaga API 14, do starej wersji, proszę użyć 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"/> 

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

Mam nadzieję, że ci pomogę.

Powiązane problemy