2012-07-11 13 views
15

No puedo insertar un interruptor en mi proyecto debido al siguiente error:Android: ¿API requerida para usar Switch?

Vista requiere nivel de la API 14 (min actual es 8):

Pero en mis propiedades del proyecto, utilizo Plataforma 4.1 y API Nivel 16. Entonces, ¿qué está mal?

+0

Consulte la solución aquí: http://stackoverflow.com/questions/9920709/use-android-4-0-styled-toggle-button/15640365#15640365 – dberm22

Respuesta

74

Hay una agradable charla sobre esto desde Google IO 2012 (starting at slide 32)

Aquí i s un ejemplo detallado:

Cree un archivo XML de diseño separado para las versiones de ICS + colocándolo en/res/layout-v14. La estructura del archivo resultante será algo como esto:

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

Android será entonces buscar recursos en el directorio de diseño-v14 cuando su aplicación se está ejecutando en el V14 o superior.

Publicar un incluyen en mainlayout.xml que se tire en el compound_button.xml pertinente cuando se ejecuta la aplicación:

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

Para el pre 4.0 diseño que queremos una casilla de verificación, por tanto, crear/diseño/compound_button. XML como una fusión de la siguiente manera:

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

Y luego para el diseño 4.0+ queremos un interruptor, por tanto, crear /layout-v14/compound_button.xml como una fusión de la siguiente manera:

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

Por supuesto, asegúrese de ajustar su min y objetivos de manera adecuada:

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

Proporcione un resumen de lo que hay en ese enlace. No nos pida que vayamos a otro sitio solo para beneficiarnos de su respuesta. ¿Y qué pasa si el otro sitio se va o se rompe el enlace? –

+0

El conmutador solo está disponible desde API v14 en adelante. ¿Entonces supongo que se debe usar layout-v14 en lugar de layout-v11? – Almer

+0

Tienes razón, Almer. El interruptor no se introdujo hasta v14 y, por lo tanto, se debe usar layout-v14. ¡Buena atrapada! – suomi35

5

Busque esto en su archivo AndroidManifest.xml:

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

Cambio minSdkVersion 14.

+0

¡Gracias por esto! No sabía que estaba en el Manifiesto. – Rob

+1

Tenga en cuenta que si cambia minSdkVersion a 14, su aplicación solo funcionará con teléfonos con Android 4.0 o superior. Que actualmente es solo el 10% de todos los teléfonos con Android. – azgolfer

+0

Bueno, ya veo. Entonces, ¿cuál es la mejor alternativa para cambiar? Creo que tendré que ir con un CheckBox. – Rob

1

Su android:minSdkVersion se ajusta a 8. Esto significa que su aplicación se ejecutará en API-8 (2.2. 1) y por encima, pero se colapse debido interruptor no está disponible

1

Una mejor solución es tener dos diseños diferentes XML en la carpeta de diseños y la carpeta de diseños-v14 con los mismos nombres y el mismo código. En los diseños, alternarBotón/casillas de verificación y en layouts-v14 su interruptor y comprobar dinámicamente la versión de la API e inflar el diseño respectivo.

0

Look hay dos maneras de resolver el problema en primer lugar, ya sea que cambie su minSdkVersion <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/> del 8 al 14 o definir otra distribución que contiene final de carrera en diseño-V14 puede crear manualmente esta carpeta en el directorio res

3

interruptor requiere API 14, para la versión antigua, por favor utilice 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"/> 

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

Espero ayudarte.