2015-01-20 21 views
6

Ho scritto alcune app per Android ma non capisco quando utilizzare app: e quando utilizzare android:. Quando gli stili non vengono applicati nel modo previsto, utilizzo tentativi ed errori e talvolta scopro che l'utilizzo di app: anziché android: risolve il problema ma non capisco perché. Sarebbe bello se qualcuno potesse indicarmi la giusta direzione. Grazie!Layout Android - quando utilizzare l'app: vs Android :?

+2

quando si utilizzano attributi personalizzati ... si applica anche agli atributtes dalle librerie di supporto ...anche app non è precisa in quanto è semplicemente scorciatoia namespace e cosa significa dipende dalla definizione (fx: se metti 'xmlns: and =" http://schemas.android.com/apk/res/android "' verrai in grado di usare 'e:' invece 'android:') – Selvin

+4

Leggi informazioni sugli spazi dei nomi XML. – Simon

risposta

4

Stai parlando di namespace personalizzato. In Android possiamo creare visualizzazioni personalizzate in aggiunta alle viste già disponibili. Come da documenti dello sviluppatore di Google. Per aggiungere una vista incorporata all'interfaccia utente, specificarla in un elemento XML e controllarne l'aspetto e il comportamento con gli attributi dell'elemento. Anche le visualizzazioni personalizzate ben scritte possono essere aggiunte e modificate tramite XML. Per abilitare questo comportamento in visualizzazione personalizzata, è necessario:

Definire gli attributi personalizzati per la visualizzazione in un elemento di risorsa Specificare i valori per gli attributi nel layout XML recuperare i valori degli attributi in fase di esecuzione Applicare i valori degli attributi recuperati al tuo view

Una volta definiti gli attributi personalizzati, è possibile utilizzarli nei file XML di layout come gli attributi incorporati. L'unica differenza è che i tuoi attributi personalizzati appartengono a uno spazio dei nomi diverso. Invece di appartenenza alla http://schemas.android.com/apk/res/android namespace, appartengono a nome http://schemas.android.com/apk/res/[your pacchetto]

Così, per se si utilizza visualizzazioni predefinite che è possibile utilizzare namespace Android e se si desidera impostare e utilizzare gli attributi per visualizzazione personalizzata è possibile definire il proprio nome.

consultare this

4

Se si dà un'occhiata agli inizi degli tuoi file xml di layout (in cui è stato utilizzato app:) si (probabilmente) trovare linee come questo:

<?xml version="1.0" encoding="utf-8"?> 
<SOME_LAYOUT xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 

in questo caso verrà utilizzato app: namespace per attributi personalizzati, specificati dall'utente nel file attrs.xml o da qualcun altro in una delle librerie utilizzate.

0

inoltre troverete due varianti

xmlns:app="http://schemas.android.com/apk/res-auto" 

xmlns:app="http://schemas.android.com/apk/[packagename]" 

la differenza tra le linee xmlns è res-auto prendersi cura di risolvere il nostro pacchetto come qualche volta l'aggiungeremo .debug o .test nel nostro pacchetto e abbiamo già fornito il pacchetto della app Es:

xmlns:app="http://schemas.android.com/apk/com.test.io.debug" 
xmlns:app="http://schemas.android.com/apk/com.test.io.test" 
2

Mi sono appena iscritto a StackOverflow anche se lo sto utilizzando attivamente per un lungo tempo, quindi mi scuso se la mia risposta è in ritardo.

È possibile utilizzare lo spazio dei nomi dell'app per ottenere la compatibilità delle app con versioni API precedenti.

Per esempio app: srcCompat = "@ drawable/customborder" ha gli stessi effetti con Android: background = "@ drawable/customborder" la differenza è che il primo sarà funzionare correttamente con vecchie API e il secondo testamento non visualizzare ciò che desideri.