2015-12-17 19 views
9

Con le versioni precedenti di Android Studio, tutte le cartelle bucket disegnabili sono state create per impostazione predefinita (vale a dire drawable-mdpi, drawable-hdpi, ecc.). Nelle versioni più recenti di Android Studio, fornisce solo drawable e drawable-v21. Perché?Versioni più recenti di Android Studio e solo due directory disegnabili - disegnabile e disegnabile-v21

C'è un motivo per cui Android (nella sua infinita saggezza) non offre più le cartelle del secchio separate?

Giusto per notare, so che è possibile aggiungerli manualmente, ma voglio essere sicuro che non ci sia un nuovo motivo di buona pratica per non usare più queste cartelle.

+1

Mi ricordo di aver letto qualcosa sul fatto che ci sia una nuova best practice che stanno cercando di incoraggiare: usare SVG per i drawable invece delle immagini raster, quindi è sufficiente una sola immagine che possa essere ridimensionata in modo pulito. – alzee

+0

penso che sia in parte a causa dell'introduzione della cartella mipmaps – user2511882

+0

Grazie per la nota. Da quello che ricordo, solo le versioni più recenti di Android supportano solo SVG, in modo che non funzioni sulla maggior parte dei progetti su cui lavoro, ma cercherò di trattenerlo come possibile motivo. E potrei sbagliarmi anche riguardo alla cosa SVG, non essendo retrocompatibile, controlleremo! – Bourne

risposta

9

Grazie a tutti coloro che hanno cercato di aiutare, mi avete aiutato a raggiungere la risposta finale, ma nessuna soluzione era giusta. @ user3137702 era probabilmente il più vicino, in quanto correlato all'intero spostamento verso vettori/SVG. Non sono riuscito a trovare una risposta definitiva, come qualcosa direttamente da Google (anche se immagino sia là fuori), ma da quello che ho raccolto da una serie di articoli, c'è probabilmente una ragione per cui stanno facendo questo.

Per i principianti, sembra iniziato in Android Studio 1.4. Sono in 1.5 in questo momento. Sembra che Android si stia muovendo nella direzione di non aver più bisogno di creare le proprie cartelle di densità (cioè mdpi, hdpi, ecc.) Per i drawable (mipmaps è diverso, quindi per favore non confondilo con quello di cui sto parlando) . A partire da Android Studio 1.4, prenderà gli SVG che inserirai nella normale cartella drawable (come non nella cartella v21), li convertirai in png e li collocherai nelle cartelle di densità generate automaticamente durante la sequenza di build (quindi Gradle fa questo per te , in sostanza) per tutte le versioni precedenti all'API 21. Per 21 e versioni successive, SVG è supportato in modo diverso, ovvero un altro argomento. Ma questo essenzialmente rende il supporto SVG compatibile all'indietro fino all'API 1 !!!

TUTTAVIA, c'è una grande presa. Questa conversione SVG non ha sempre successo come potresti sperare. Supporta solo un sottoinsieme di file SVG, quindi a seconda di come lo si salva (ovvero quali impostazioni vengono applicate durante il salvataggio), potrebbe non essere visualizzato correttamente. Anche le impostazioni più comuni, come i riempimenti a gradiente e motivo, i riferimenti IRI locali e le trasformazioni NON sono ancora supportate. Se stai lavorando con file SVG che non hai generato, probabilmente avrai problemi nell'importarli. Se tu o qualcuno con cui lavori direttamente li generi, potresti dover sperimentare come salvare i file, e dovresti testare spesso le build su versioni precedenti di Android per assicurarti che risultino come previsto.

Per importare SVG in Android 1.4 + Studio, seguire questi semplici passi:

  1. tasto destro del mouse sulla res/cartella drawable
  2. Selezionare "Nuovo"
  3. Selezionare "Vector Asset"
  4. A questo punto, puoi selezionare una "icona del materiale", che funziona davvero bene, e ci sono un sacco di belle icone "libere" che puoi selezionare da . Per gli sviluppatori indipendenti, senza il supporto dell'icona di progettazione, questo è bello!
  5. OPPURE - è possibile selezionare "File SVG locale"
  6. Quindi scegliere un SVG da entrambe le opzioni con l'opzione "scegli". ATTENZIONE: è qui che potrebbe andare male, se l'SVG che importi non viene salvato correttamente.
  7. Hit "Avanti"
  8. Verificare che è il risparmio nel posto giusto, e quindi fare clic su "Fine"
  9. A questo punto, è di riferimento in grado di: android: icon = "@ drawable/ic_imagename" (utilizzando il proprio nome immagine, invece di ic_imagename, ovviamente)

@ risposta di CommonsWare è stato molto disponibile nel condurre alla soluzione giusta, ma da quello che ho visto, generando diverse varianti di nuovi progetti di diversi template e le impostazioni di supporto versione, non c'era alcun modo per far sì che le vecchie cartelle di densità venissero generate automaticamente. Qui c'è sicuramente molto di più di una semplice selezione di modelli. Ma come lui/lei ha detto, a seconda di quale modello/versione si seleziona, si può finire con un diverso insieme di questi due tipi di cartelle disegnabili. Ma specifico per la mia domanda, Android Studio sembra mettere l'accento su questo nuovo approccio di non creare affatto le proprie cartelle di densità disegnabili.

È piuttosto bello, ma ha ancora bisogno di un po 'di lavoro. In termini pratici, probabilmente avrò ancora bisogno di aggiungere le cartelle di densità disegnabili per supportare tutte le immagini con cui lavoro, finché questo meccanismo non sarà un po 'più di supporto per tutti i tipi di rendering SVG.

E un altro tidbit: poiché tutto questo viene gestito tramite Gradle (la generazione effettiva delle cartelle di densità), è possibile aggiungere le impostazioni di build tramite il meccanismo di sapore per limitare le cartelle di densità che si desidera generare. Quindi, se, ad esempio, se le immagini mdpi hanno raggiunto la fine della loro utilità per la tua particolare base di utenti e desideri lasciare quella dimensione/densità fuori dalla tua app per radere un paio di MB dalla dimensione dell'app, puoi impostarla nel Gradle costruire il sapore.

+0

Sì, la chiave è che devi fare clic su "Nuovo" -> "Vector Asset" per creare il file XML da file SVG. –

1

Nelle versioni più recenti di Android Studio, fornisce solo drawable e disegnabile-V21

che dipende interamente da ciò che si considera "versioni più recenti di Android Studio" essere e cosa impostazioni utilizzate quando si creato un progetto. Ad esempio, in Android Studio 1.5.1, ho appena creato una coppia di progetti di scrap utilizzando la procedura guidata del nuovo progetto, accettando tutti i valori predefiniti per uno (risultato: minSdkVersion di 21) e modificando lo minSdkVersion del secondo fino a 19. Non lo faccio avere una directory drawable-v21 in entrambi i progetti.

Quali directory vengono create sono guidate dai modelli utilizzati da Android Studio per il nuovo progetto e, se si è scelto di averne uno, la nuova attività. L'IDE non cambia solo nel tempo, ma anche i modelli.

Perché è quello?

Le icone di avvio sono state spostate nelle risorse mipmap.

I file vettoriali vettoriali vanno in una directory -v21/, con gli strumenti di generazione che generano automaticamente file PNG specifici della densità per dispositivi precedenti. Quei file PNG non verranno visualizzati nel modulo src/ nel tuo modulo, ma piuttosto in build/, poiché vengono generati dall'ingresso del disegno vettoriale e quindi non sono considerati parte del sorgente del progetto (proprio come i file di classe Java, generati dal codice sorgente Java codice, non fa parte della fonte del progetto).

Oltre a ciò, apparentemente stanno cercando di fare un lavoro migliore per non creare directory vuote nell'albero delle risorse. Se il modello che hai scelto non usa le icone bitmap non mipmap, non c'è motivo per l'IDE di creare quelle directory disegnabili. L'IDE non è perfetto per questo — i miei due progetti di scarto hanno ciascuno una directory res/drawable/ vuota — ma stanno migliorando.

Problemi correlati