2016-08-11 39 views
0

出於測試目的:重分析機器人重力

在這裏,例如:

<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"/> 

重力INT當量是: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) 

您可以使用this question生成Map字符串和代碼。

要將列表轉換爲字符串,您還可以創建列表並使用Join(番石榴)或Apache Commons。

+0

我需要回去翻譯爲:'String str =「center_vertical | start」'; – Andreyua

+0

以編程方式? –

+0

沒有類似的問題。 是的!以編程方式 – Andreyua