2015-01-20 5 views
6

Ich habe einige Android-Apps geschrieben, aber ich verstehe nicht wirklich, wann app: zu verwenden ist und wann android: zu verwenden ist. Wenn Stile nicht so angewendet werden, wie sie sollen, benutze ich Versuch und Irrtum und finde manchmal, dass die Verwendung von app: anstelle von android: das Problem löst, aber ich verstehe nicht warum. Es wäre toll, wenn mir jemand in die richtige Richtung zeigen könnte. Vielen Dank!Android-Layout - wann App: vs Android :?

+2

Wenn Sie benutzerdefinierte Attribute verwenden ... es gilt auch für atributtes von Support-Bibliotheken ...auch App ist nicht genau, da es einfach Namespace-Verknüpfung ist und was es bedeutet, hängt von der Definition ab (fx: wenn Sie 'xmlns: and =" http://schemas.android.com/apk/res/android "' würden Sie sein in der Lage zu verwenden 'und:' statt 'android:') – Selvin

+4

Lesen Sie über XML-Namespaces. – Simon

Antwort

4

Sie sprechen über benutzerdefinierten Namespace.In Android können wir benutzerdefinierte Ansichten zusätzlich zu bereits verfügbaren Ansichten erstellen. Wie in den Google-Entwicklerdokumenten beschrieben. Um Ihrer Benutzeroberfläche eine integrierte Ansicht hinzuzufügen, geben Sie sie in einem XML-Element an und steuern deren Aussehen und Verhalten mit Elementattributen. Gut geschriebene benutzerdefinierte Ansichten können auch über XML hinzugefügt und formatiert werden. Um dieses Verhalten in Ihrer benutzerdefinierten Ansicht zu aktivieren, müssen Sie:

Definieren von benutzerdefinierten in einem Ressourcenelement für Ihre Ansicht Attribute Werte Geben Sie für die Attribute in der XML-Layout Abrufen von Attributwerten zur Laufzeit Nehmen, um die abgerufenen Attributwerte zu Ihrem Ansicht

Sobald Sie die benutzerdefinierten Attribute definiert haben, können Sie sie in Layout-XML-Dateien genauso verwenden wie integrierte Attribute. Der einzige Unterschied besteht darin, dass Ihre benutzerdefinierten Attribute zu einem anderen Namespace gehören. Anstatt zum http://schemas.android.com/apk/res/android Namensraum zu gehören, gehören sie zu http://schemas.android.com/apk/res/[your Paketname]

Also wenn Sie Standardansichten verwenden, können Sie Android-Namespace verwenden und wenn Sie Attribute für benutzerdefinierte Ansicht festlegen und verwenden möchten, können Sie Ihren eigenen Namen definieren.

Siehe this

4

Wenn Sie einen Blick auf den Anfang der XML-Dateien Ihr Layout übernehmen (verwendet, in dem Sie app:) Sie (wahrscheinlich) Zeilen wie diese finden:

<?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 diesem Fall app: Namespace verwendet werden für benutzerdefinierte Attribute, die von Ihnen in der Datei attrs.xml oder von einer anderen Person in einer der verwendeten Bibliotheken angegeben werden.

0

außerdem zwei Varianten

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

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

die Differenz zwischen Xmlns Linien finden, ist res-auto unseres Pakets zur Lösung kümmern, wie irgendwann werden wir .debug oder .test in unserem hinzufügen Paket und wir zur Verfügung stellten bereits die PackageID der App Ex:

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

ich trat Stackoverflow, obwohl ich es für eine lange aktiv bin mit Zeit, also entschuldige ich mich, wenn meine Antwort verspätet ist.

Sie können den App-Namespace verwenden, um App-Kompatibilität mit älteren API-Versionen zu haben.

Zum Beispiel App: srcCompat = „@ ziehbar/customborder“ hat die gleichen Effekte mit android: background = „@ ziehbar/customborder“ Der Unterschied besteht darin, dass die erste richtig mit älteren API arbeiten und den zweiten Willen nicht anzeigen, was Sie möchten.