2016-09-20 6 views
7

Kopałem w źródłach Androida, szukając odpowiedzi na pytanie, jak system rozpoznaje słowo kluczowe wymienione w układzie. Na przykład,Jak Android interpretuje słowo kluczowe @null w układach?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:background="@null" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

Dotychczas Śledziłem tę trasę:

  1. TypedArray#getDrawable(int index)
  2. ResourcesImpl#getValue(@AnyRes int id, TypedValue outValue, boolean resolveRefs)
  3. AssetManager#getResourceValue(@AnyRes int resId, int densityDpi, @NonNull TypedValue outValue,boolean resolveRefs)
  4. AssetManager#loadResourceValue(int ident, short density, TypedValue outValue,boolean resolve)

próbowałem f ind in source code implementacji JNI metody AssetManager loadResourceValue, ale mi się nie udało.

Byłbym wdzięczny, gdyby ktoś mógł wskazać, jak Android rozwiązuje tag @ null.

Z góry dziękuję!

Odpowiedz

1

Wyszukujesz w interfejsie AssetManager, który jest odsłonięty przez NDK. W ogóle nie ma funkcji JNI. Opakowanie JNI dla android.util.AssetManager to here.

ResTable klasa służy do rzeczywistego analizowania i rozwiązywania. Jeśli zagłębisz się nieco głębiej - znajdziesz lines gdzie obsługiwane jest @null.

+0

Wow, kod wygląda na zwariowanego! Serio, dziękuję za odpowiedź! –