2011-06-23 60 views
0

我想確認Android XML文件中的按位運算符。例如這條線如何讀取按位運算符OR(|)的結果?

android:layout_gravity="center_horizontal|bottom" 

我應該怎麼讀它? Java或Android繼承的規則是否對位運算符做了自己的解釋?

是否支持所有按位運算符?如果是的話,你能告訴我其他運營商的例子(鏈接也很好)嗎?

感謝

回答

1

android_layout_gravity值由Android的代碼解析。如記錄here,這裏唯一認可的運營商是|。我不認爲將|解釋爲按位或運算符是規範的一部分。 (例如,center_horizontal是0x05和right是0x01;它們的位或將只是0x05。)

+0

顯然,水平中心和右邊不應該一起使用。然而,你可以使用任何你想要的按位運算符,但它沒有任何目標,它仍然是100%正確的語法。如果您使用center_horizo​​ntal並且頂部爲0x05 | 0x30,您將得到0x35,並且它與任何其他按位標誌一樣工作。 – piotrpo

+0

根據你發給我的鏈接,這個'|'只是多個屬性的分隔符。對?它是否被視爲按位或?我的意思是,這兩個值都是強制性的,所以元素將位於這兩個位置。 – sandalone

+1

@askmoo - 我相信屬性值的解釋確實是按位或實現的。但它可以像一組標誌一樣容易地實現。正如@piotrpo指出的那樣,邏輯上不兼容的值不應該一起使用。如果你這樣做,我相信結果是不確定的。 (如果規範說明這些值是使用按位或進行組合的,那麼結果將會被定義,但我無法找到記錄此行爲的任何地方。)可以通過源頭挖掘來看它是如何實現的,但是如果它沒有定義,這可能會在未來的版本中發生變化。 –

2
2|1 = 3 
2&1 = 0 
3&1 = 1 

central_horizo​​ntal,底部是整數,所以你可以使用這種結構

int center_horizontal = 0x05; //just for clarification 
    int other_orientation = 0x10; 
    int orietntation = center_horizontal | other_orientation; 

//this condition returns true 
    if((orientation&center_horizontal)==center_horizontal){ 
     //something to do 
     } 
+0

嗯,這是非常有趣的聲明。你什麼時候會使用這樣的代碼?爲什麼? – sandalone

+0

您可以在創建自己的標誌時使用它。你有問,所以我會發布答案。可以使用任何運算符 - &,|,^,它將起作用。 – piotrpo

+0

好的。而這個例子,你已經做了'false'。對? – sandalone