Что означает остаток >= 0x0100000 в источнике AlertDialog?

Исходный код AlertDialog имеет следующий метод:

static int resolveDialogTheme(Context context, int resid) { if (resid == THEME_TRADITIONAL) { return com.android.internal.R.style.Theme_Dialog_Alert; } else if (resid == THEME_HOLO_DARK) { return com.android.internal.R.style.Theme_Holo_Dialog_Alert; } else if (resid == THEME_HOLO_LIGHT) { return com.android.internal.R.style.Theme_Holo_Light_Dialog_Alert; } else if (resid == THEME_DEVICE_DEFAULT_DARK) { return com.android.internal.R.style.Theme_DeviceDefault_Dialog_Alert; } else if (resid == THEME_DEVICE_DEFAULT_LIGHT) { return com.android.internal.R.style.Theme_DeviceDefault_Light_Dialog_Alert; } else if (resid >= 0x01000000) { // start of real resource IDs. return resid; } else { TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(com.android.internal.R.attr.alertDialogTheme, outValue, true); return outValue.resourceId; }
}

Что означает 0x01000000 (я понимаю, что это 2 ^ 24) означает? А какое выражение остается >= 0x0100000? Почему остаток должен быть больше 0x01000000 для "запуска реальных идентификаторов ресурсов"?

1 ответ

Биты 24-31 идентификатора ресурса Android - это идентификатор пакета.

Идентификаторы пакетов начинаются с 1, 0 означает, что это не базовый пакет.

Итак, 0x01000000 - это "начало идентификаторов реальных ресурсов".

см. комментарии выше "******** id;" "struct ResTable_package" в исходном файле фреймворка Android.

"struct ResTable_package" определяется ниже.

/** * A collection of resource data types within a package. Followed by * one or more ResTable_type and ResTable_typeSpec structures containing the * entry values for each resource type. */
struct ResTable_package
{ struct ResChunk_header header; // If this is a base package, its ID. Package IDs start // at 1 (corresponding to the value of the package bits in a // resource identifier). 0 means this is not a base package. ******** id; // Actual name of this package, \0-terminated. char16_t name[128]; // Offset to a ResStringPool_header defining the resource // type symbol table. If zero, this package is inheriting from // another base package (overriding specific values in it). ******** typeStrings; // Last index into typeStrings that is for public use by others. ******** lastPublicType; // Offset to a ResStringPool_header defining the resource // key symbol table. If zero, this package is inheriting from // another base package (overriding specific values in it). ******** keyStrings; // Last index into keyStrings that is for public use by others. ******** lastPublicKey;
};

licensed under cc by-sa 3.0 with attribution.