36

Voglio usare Materiale Tema nella mia applicazione che ha una versione minima di sdk di 8. Come da documenti - "Il tema materiale è disponibile solo in Android 5.0 (livello API 21) e versioni successive Le librerie di supporto v7 forniscono temi con stili di progettazione dei materiali per alcuni widget e supporto per la personalizzazione della tavolozza dei colori. " Significa che posso usarlo se aggiungo v7 Support Libarary nel mio progetto? Perché dopo aver aggiunto questa libreria ho ricevuto il seguente errore:android: Theme.Material.Light richiede il livello API 21 (min corrente è 8)

android:Theme.Material.Light requires API level 21 (current min is 8).

O forse ho capito qualcosa di sbagliato? Ogni suggerimento sarà apprezzato. Grazie in anticipo.

+1

In quella pagina, dicono di vedere [questa pagina] (https://developer.android.com/training/ materiale/compatibilità.html) che ti dice quale Theme.AppCompat puoi usare. –

+0

yaa supporta lib supporta la versione 8 ma devi compilare con 21 –

+0

@JeremyMiller Grazie per il link mi è mancato. – PPD

risposta

40

Per questo è necessario disporre di una cartella con 2 valori.

Uno esistente per impostazione predefinita e un altro, è necessario creare nella cartella di ricerca e denominarlo valori-v21.

Nella cartella dei valori predefiniti, in styles.xml, utilizzare un tema diverso dal tema Materiale E nella cartella styles.xml della cartella valori-v21 creata, utilizzare Materiale tema.

Il telefono Android preleverà automaticamente gli styles.xml che supporta. Se il telefono supporta Material Design (dispositivi Lollipop), la tua app utilizzerà il tema materiale (cartella valori-21).

in caso contrario (nei telefoni con versioni Android precedenti), verrà utilizzata la cartella dei valori predefiniti.

+0

dovrebbe anche creare uno Strings.xml identico? sembra un po 'ridondante? –

33

È necessario utilizzare il tema android:theme="@style/Theme.AppCompat.Light" per ottenere un design del materiale.

Assicurati che il tuo min è 8 e il vostro obiettivo è 21. E si sta utilizzando costruire strumenti/sdk 21.

+0

Penso che preferisco questa risposta rispetto a quella accettata. – Rishabh

23

Pedro Oliveira is right per quanto riguarda Theme.AppCompat, ma alcune informazioni essenziali è mancante in quella risposta.

Un post blog dal titolo appcompat v21: material design for pre-Lollipop devices! da Chris Banes da parte del team di Android probabilmente meglio risponde alla domanda di come ottenere materiale a tema per i livelli di API prima del 21.

Per riassumere, è necessario appcompat-v7 dependency:

dependencies { 
    ... 
    compile "com.android.support:appcompat-v7:21.0.3" 
} 

Dopo di che, per la versione scura come tema base, utilizzare:

<style name="AppTheme" parent="Theme.AppCompat"> 
</style> 

E per la versione leggera:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
</style> 

E se sei un nuovo AppCompat, ci sono cose che dovete sapere, come ad esempio:

All of your Activities must extend from ActionBarActivity*. It extends from FragmentActivity from the v4 support library, so you can continue to use fragments.

* NB: più recentemente, ActionBarActivity è stato deprecato a favore di AppCompatActivity.

Ma dovresti davvero leggere l'intera sezione di installazione di quel post sul blog! (Le informazioni su Toolbar vs Action Bar e some of the comments sono anche qualcosa che probabilmente non dovresti perdere.)

+0

Grazie per averlo aggiunto :) –

+0

Utilizzo di Theme.AppCompat.Light.NoActionBar ed estensione da android.support.v4.app.FragmentActivity, funziona correttamente. Penso che una volta aggiunto ActionBar, entri in gioco il requisito di estendere da ActionBarActivity. –

+0

Sì, quella frase che ho citato non è la più chiara. Se non si utilizza Action Bar (o Barra degli strumenti come barra delle azioni?), ActionBarActivity non è necessario. – Jonik

Problemi correlati