Moins Documentation et écrit pour la procédure de base et appel invoqué pour setContentView()
et d'autres méthodes. En fait, lorsque vous appelez le setContentView(R.layout.<layout_file_name>);
. Android nutshell entrer dans l'image, qui va gonfler le fichier de disposition donné à partir de son ID et préparer Voir pour votre activité actuelle et mettre en haut niveau.
What happen when you call setContentView(R.layout.<layout_name>) ?
Le système Android reçoit cette référence et l'utilise pour invalider, mesurer et dessiner l'arbre. Le nœud racine de la hiérarchie demande à ses nœuds enfants de se dessiner eux-mêmes. En tour, chaque nœud de groupe de vues est chargé d'appeler chacune de ses propres vues enfants pour se dessiner. Les enfants peuvent demander une taille et un emplacement dans le parent, mais l'objet parent a la décision finale sur la taille de chaque enfant. Android analyse les éléments de votre mise en page dans l'ordre (à partir du haut de l'arborescence de la hiérarchie), instanciant les vues et les ajoutant à leurs parents. Parce que ceux-ci sont dessinés dans l'ordre, s'il y a des éléments qui chevauchent des positions, le dernier à être tiré sera au-dessus des autres précédemment dessinés à cet espace.
Mise à jour:
Ok, après avoir regardé j'ai trouvé,
Lorsque vous appelez setContentView() de classe de base d'activité, il appelle la méthode abstraite de classe fenêtre de setContentView() qui est la méthode abstraite, et le seul primordial de cette méthode est dans PhoneWindow Classe. Qui ressemble à,
@Override
public void setContentView(int layoutResID) {
if (mContentParent == null) {
installDecor();
} else {
mContentParent.removeAllViews();
}
mLayoutInflater.inflate(layoutResID, mContentParent);
final Callback cb = getCallback();
if (cb != null) {
cb.onContentChanged();
}
}
L'inflation de la vue a donc lieu dans cette classe.
Mise à jour: 2 sur la génération de fichiers R.java ..
Aapt(Android Asset Packaging Tool)
- Cet outil compile tous les fichiers de mise en page XML et le fichier AndroidManifest.xml
. En dehors de la version compilée cela génère aussi un fichier R.java
contenant toutes les références des ressources compilées.
Les ressources, stockées dans le sous-répertoire res, incluent des éléments tels que des icônes, des dispositions et des chaînes. Ceux-ci sont compilés à l'aide de l'outil aapt dans un fichier nommé R.java
, stocké dans le sous-répertoire .
De AAPT aide
aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
[-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
[--min-sdk-version VAL] [--target-sdk-version VAL] \
[--max-sdk-version VAL] [--app-version VAL] \
[--app-version-name TEXT] [--custom-package VAL] \
[-I base-package [-I base-package ...]] \
[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] \
[-S resource-sources [-S resource-sources ...]] [-F apk-file] [-J R-file-dir] \
[raw-files-dir [raw-files-dir] ...]
Package the android resources. It will read assets and resources that are
supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R
options control which files are output.
Commande pour AAPT: (Pour HelloWorld Application Android)
aapt \package -v -f -m -M AndroidManifest.xml -S .\bin\res -S .\res \
-I C:\local\android-sdk-windows\platforms\android-15\android.jar \
-J .\gen --generate-dependencies
Et le résultat ressemble,
Configurations:
(default)
hdpi
ldpi
mdpi
Files:
drawable\ic_launcher.png
Src: (hdpi) .\res\drawable-hdpi\ic_launcher.png
Src: (ldpi) .\res\drawable-ldpi\ic_launcher.png
Src: (mdpi) .\res\drawable-mdpi\ic_launcher.png
layout\main.xml
Src:() .\res\layout\main.xml
values\strings.xml
Src:() .\res\values\strings.xml
AndroidManifest.xml
Src:() AndroidManifest.xml
Resource Dirs:
Type drawable
drawable\ic_launcher.png
Src: (hdpi) .\res\drawable-hdpi\ic_launcher.png
Src: (ldpi) .\res\drawable-ldpi\ic_launcher.png
Src: (mdpi) .\res\drawable-mdpi\ic_launcher.png
Type layout
layout\main.xml
Src:() .\res\layout\main.xml
Type values
values\strings.xml
Src:() .\res\values\strings.xml
Including resources from package: \
C:\local\android-sdk-windows\platforms\android-15\android.jar
applyFileOverlay for drawable
trying overlaySet Key=ic_launcher.png
baseFile 0 has flavor ,,,,,,,,,,,hdpi,,,,,,,
baseFile 1 has flavor ,,,,,,,,,,,ldpi,,,,,,,
baseFile 2 has flavor ,,,,,,,,,,,mdpi,,,,,,,
overlayFile 0 has flavor ,,,,,,,,,,,hdpi,,,,,,,
overlayFile 1 has flavor ,,,,,,,,,,,ldpi,,,,,,,
overlayFile 2 has flavor ,,,,,,,,,,,mdpi,,,,,,,
found a match (0) for overlay file ic_launcher.png, \
for flavor ,,,,,,,,,,,hdpi,,,,,,,
found a match (1) for overlay file ic_launcher.png, \
for flavor ,,,,,,,,,,,ldpi,,,,,,,
found a match (2) for overlay file ic_launcher.png, \
for flavor ,,,,,,,,,,,mdpi,,,,,,,
applyFileOverlay for layout
applyFileOverlay for anim
applyFileOverlay for animator
applyFileOverlay for interpolator
applyFileOverlay for xml
applyFileOverlay for raw
applyFileOverlay for color
applyFileOverlay for menu
applyFileOverlay for mipmap
(new resource id ic_launcher from \
.\bin\res\drawable-hdpi\ic_launcher.png)
(new resource id ic_launcher from \
.\bin\res\drawable-ldpi\ic_launcher.png)
(new resource id ic_launcher from \
.\bin\res\drawable-mdpi\ic_launcher.png)
(new resource id main from .\res\layout\main.xml)
Writing symbols for class R.
Vous pouvez trouver peu d'infos sur http: // stackove rflow.com/questions/7838921/android-listview-addheaderview-nullpointerexception-for-predefined-views/7839013#7839013 et http://stackoverflow.com/questions/13878053/android-xml-vs-java-layouts-performance/ 13878145 # 13878145 ces deux questions. – user370305
les identifiants sont générés au moment de la compilation par aapt ou l'un d'entre eux. La plupart du gonflement se produit dans LayoutInflater.inflate et rInflate – njzk2
@ njzk2 Je veux dire où le fichier xml (disposition) pour l'activité invoquer inflatter quand nous appelons la méthode setContentView() –