查看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
(guava) 或 Apache Commons。