Перепроизвести гравитацию Android
Для целей тестирования:
Вот, например:
<TextView
android:id="@id/expander"
android:text="Fewer Details"
android:layout_gravity="center_vertical|start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Эквивалентная сила тяжести равна:8388627.
Как повторить анализ 8388627 для получения строки "center_vertical|start"?
1 ответ
Глядя на Gravity
объект, вам нужно перевести дескрипторы XML в константы объекта:
center_vertical
->Gravity.CENTER_VERTICAL
Постоянное значение: 16 (0x00000010)start
->Gravity.START
Постоянное значение: 8388611 (0x00800003)
Вы добавляете их, и вы получаете свою ценность (8388627).
Обратное можно сделать с помощью логических операций в 3 этапа:
- устранить общие флаги (например,
Gravity.RELATIVE_LAYOUT_DIRECTION
) - постепенно устранять другие флаги
- рекомбинировать общие и нормальные флаги обратно (например,
LEFT + RELATIVE_LAYOUT_DIRECTION = START
) - это необязательно
Мой подход будет следующим:
Create a Map<int, String> modifiers
Create a Map<int, String> flags
Create a List<int> components
Populate modifiers with all generic flags and their corresponding strings
Use something like (flag > 0x0010000 && (flag & 0x0000FFFF == 0))
Populate flags with all other elements ( < 0x0010000)
// Note: Don't populate modifiers with elements like Gravity.START
int value = my_value_to_parse
for (int i in modifiers.keys()) {
if (value & i > 0) {
components.add(i)
value = value & !i
}
}
// Same code for the flags
for (int i in flags.keys())
...
// One can add logic for merging composite flags here
// And add the components to a string
String result = ""
for (int component: components) {
if (modifiers.containsKey(component))
result += modifiers.get(component)
else if (flags.containsKey(component))
result += flags.get(component)
result += "|"
// Return everything except last | character
return result.substring(0, result.length() - 2)
Вы можете использовать этот вопрос для создания Map
строк и кодов.
Чтобы преобразовать список в строку, вы также можете создать список и использовать Join
(гуава) или Apache Commons.