Что означает остаток >= 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.