我想確認Android XML文件中的按位運算符。例如這條線如何讀取按位運算符OR(|)的結果?
android:layout_gravity="center_horizontal|bottom"
我應該怎麼讀它? Java或Android繼承的規則是否對位運算符做了自己的解釋?
是否支持所有按位運算符?如果是的話,你能告訴我其他運營商的例子(鏈接也很好)嗎?
感謝
我想確認Android XML文件中的按位運算符。例如這條線如何讀取按位運算符OR(|)的結果?
android:layout_gravity="center_horizontal|bottom"
我應該怎麼讀它? Java或Android繼承的規則是否對位運算符做了自己的解釋?
是否支持所有按位運算符?如果是的話,你能告訴我其他運營商的例子(鏈接也很好)嗎?
感謝
的android_layout_gravity
值由Android的代碼解析。如記錄here,這裏唯一認可的運營商是|
。我不認爲將|
解釋爲按位或運算符是規範的一部分。 (例如,center_horizontal
是0x05和right
是0x01;它們的位或將只是0x05。)
2|1 = 3
2&1 = 0
3&1 = 1
central_horizontal,底部是整數,所以你可以使用這種結構
int center_horizontal = 0x05; //just for clarification
int other_orientation = 0x10;
int orietntation = center_horizontal | other_orientation;
//this condition returns true
if((orientation¢er_horizontal)==center_horizontal){
//something to do
}
顯然,水平中心和右邊不應該一起使用。然而,你可以使用任何你想要的按位運算符,但它沒有任何目標,它仍然是100%正確的語法。如果您使用center_horizontal並且頂部爲0x05 | 0x30,您將得到0x35,並且它與任何其他按位標誌一樣工作。 – piotrpo
根據你發給我的鏈接,這個'|'只是多個屬性的分隔符。對?它是否被視爲按位或?我的意思是,這兩個值都是強制性的,所以元素將位於這兩個位置。 – sandalone
@askmoo - 我相信屬性值的解釋確實是按位或實現的。但它可以像一組標誌一樣容易地實現。正如@piotrpo指出的那樣,邏輯上不兼容的值不應該一起使用。如果你這樣做,我相信結果是不確定的。 (如果規範說明這些值是使用按位或進行組合的,那麼結果將會被定義,但我無法找到記錄此行爲的任何地方。)可以通過源頭挖掘來看它是如何實現的,但是如果它沒有定義,這可能會在未來的版本中發生變化。 –