3

こんにちは、これらの質問はかなり基本的なもののようですが、これに関する答えは見つかりませんでした。

setContentView(R.layout.somelayout)次に、レイアウト XML ファイルがサービスによって膨張しますLayoutInflater。しかし、私は正確にそれがどこで起こるか知りたいです。xml ファイルを拡張するコードがアクティビティ ソース コードに見つかりませんでした。

また、R のビューに対して生成されている ID は正確にはどこにありますか?

前もって感謝します。

4

1 に答える 1

5

ドキュメントが少なく、基本的な手順と呼び出された呼び出しsetContentView()およびその他のメソッド用に記述されています。

実際、あなたが電話するときsetContentView(R.layout.<layout_file_name>);Androidの概要がわかります。これにより、指定されたレイアウトファイルがIDから拡張され、現在のアクティビティ用にViewが準備され、トップレベルに配置されます。

What happen when you call setContentView(R.layout.<layout_name>) ?

Androidシステムはこの参照を受け取り、それを使用してツリーを無効化し、測定し、描画します。階層のルートノードは、その子ノードが自分自身を描画するように要求します。次に、各ビューグループノードは、自分自身の子ビューのそれぞれに自分自身を描画するように要求する責任があります。子は親内のサイズと場所を要求できますが、親オブジェクトは各子の大きさを最終的に決定します。Androidは、レイアウトの要素を(階層ツリーの最上位から)順番に解析し、ビューをインスタンス化して親に追加します。これらは順番に描画されるため、位置が重なる要素がある場合、最後に描画される要素は、以前にそのスペースに描画された他の要素の上に配置されます。

アップデート:

わかりました、私が見つけたのを見た後、

Activity基本クラスのsetContentView ()を呼び出すと、AbstractメソッドであるWindowクラスのsetContentView()のAbstractメソッドが呼び出され、このメソッドをオーバーライドするのはPhoneWindowクラスのみです。のように見えます、

 @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();
        }
    }

したがって、ビューインフレはこのクラスで行われます。

更新:2R.javaファイルの生成について。

Aapt(Android Asset Packaging Tool)–このツールは、すべてのXMLレイアウトファイルとAndroidManifest.xmlファイルをコンパイルします。コンパイルされたバージョンとは別に、これはコンパイルR.javaされたリソースのすべての参照を含むファイルも生成します。

resサブディレクトリに保存されているリソースには、アイコン、レイアウト、文字列などが含まれます。これらは、aaptツールを使用して、サブディレクトリR.javaに保存されているという名前のファイルにコンパイルされますgen/

aaptヘルプから

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.

aaptのコマンド: (HelloWorldAndroidアプリケーションの場合)

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

そして結果は次のようになります、

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.
于 2013-02-18T09:14:52.690 に答える