望着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)
您可以使用this question生成Map
字符串和代碼。
要將列表轉換爲字符串,您還可以創建列表並使用Join
(番石榴)或Apache Commons。
我需要回去翻譯爲:'String str =「center_vertical | start」'; – Andreyua
以編程方式? –
沒有類似的問題。 是的!以編程方式 – Andreyua