2014-12-12 9 views
37

Dopo API 17/supporto RTL è stato rilasciato, ho aggiunto il seguente al mio manifestocontrastanti messaggi lint per quanto riguarda l'utilizzo paddingStart

android:supportsRtl="true" 

che ha causato Lint di darmi giustamente questi avvertimenti ovunque ho avuto paddingLeft/Proprio nel mio punto di vista :

  • Considerare l'aggiunta di Android: paddingStart = "8DP" per supportare al meglio i layout da destra a sinistra

  • Considerare l'aggiunta di Android: paddingEnd = "8DP" per supportare al meglio i layout da destra a sinistra

ho fatto questo seguendo la guida trovato in questo android-developers blogpost, il che implica che non abbiamo bisogno di creare un nuovo file layout-v17, ma potrebbe semplicemente utilizzare sia paddingStart/End che gli attributi paddingLeft/Right (i left/right erano necessari per continuare a supportare un minSdk inferiore).


ho appena fatto l'aggiornamento ad Android Studio 1.0 dalla versione Beta precedente, e sto notando un nuovo errore residuo di stoffa in cui si afferma:

  • attributo paddingStart si fa riferimento qui può risultare in un incidente su alcuni dispositivi specifici di età superiore a 17 API (min corrente è 7)

e la correzione suggerita è:

Resource Override nel layout-V17

che ha un senso. Tuttavia, dopo aver creato layout-v17 e rimosso il padding non utilizzatoStart/End dalla cartella di layout principale, gli avvisi di Lint originali sono riapparsi dicendo che dovrei usare paddingStart/End. Sembra che non capisca che ho sovrascritto i file in layout-v17.

Qualcuno sa come risolvere i messaggi di errore/avviso Lint in conflitto? So che posso solo avvertire l'avviso tools:ignore, ma spero in una soluzione "corretta".


Edit (1/19/15): C'è un android issue che immagino ha portato al nuovo errore di lanugine che viene aggiunto ad Android Studio. Ciò suggerisce che il "crash su alcuni dispositivi specifici" si riferisce a una manciata di tablet Samsung su API16 in cui paddingStart ha una propria definizione e si blocca in tal modo quando tenta di analizzare "8dp".

Alcune persone nel link precedente hanno suggerito di utilizzare la cartella layout-ldrtl per gestire la direzione rtl, anziché utilizzare paddingStart e paddingEnd.

Ho anche suggerito altrove di ignorare Factory2 di LayoutInflator ogni volta che trovi che l'utente ha un tablet API16 e quindi imposta manualmente gli attributi di tutte le visualizzazioni. Questo funzionerà sicuramente, ma sembra estremamente "manuale".

Purtroppo non ho accesso a uno di questi dispositivi che si bloccano, quindi non riesco a verificare perché non ho trovato nessuno online suggerendo semplicemente di inserire paddingStart in/layout-v17/cartella e paddingLeft in/layout/? I tablet Samsung API16 in qualche modo continuano a bloccarsi nonostante PaddingStart sia presente solo in layout-v17?

+0

È solo un suggerimento. Spero che tu abbia risolto il tuo problema ormai. –

risposta

0

È solo un suggerimento. Spero che tu abbia risolto il tuo problema ormai. Se si imposta il livello minimo di SDK sotto 4.1, è necessario menzionare esplicitamente il padding come paddingLeft e paddingStart. Per il livello SDK superiore a 4.1, puoi usare paddingStart. Sto indovinando (come non l'ho mai affrontato prima), come si imposta il livello SDK a 2.2 o inferiore a 4.1, il livello di SDK Android sta impazzendo.

+0

Sfortunatamente non è così semplice. Come menzionato nella mia domanda, inizialmente avevo entrambi fino a quando l'aggiornamento di Android Studio 1.0 ha introdotto un nuovo errore di lint che affermava che non dovremmo avere paddingStart nei file xml in qualsiasi versione sotto l'API 17. L'errore di lint che ho postato lo dice molto chiaramente e viene eseguito il backup da questo numero: (https://code.google.com/p/android/issues/detail?id=60055). – tabjsina

1

Hai ragione circa la causa principale del problema - Samsung ha definito un attributo personalizzato per l'ID riservato per paddingStart o paddingEnd.

Il modo in cui ho superato questo era estrarre le proprietà di imbottitura e metterle in uno stile. Quindi, invece di avere layout diversi per SDK < 17 e SDK> = 17, ho stili diversi per loro (con paddingLeft&Right in values e paddingStart&End in values-v17).

In questo modo, Lint smetterà di lamentarsi.

+0

E gli altri attributi left/right? – Simon

+0

Ho preso l'abitudine di avere tutto usando inizio/fine definiti in stili posti sotto i valori 17 o superiore. Non è assolutamente necessario in tutti i casi, ma mi fa risparmiare la mente e forse il tempo non dovendomi preoccupare. –

Problemi correlati