问题
我有一个自定义的 Android 视图,我希望用户在其中设置重力以便在onDraw. 这是我正在使用的简化版本onDraw:
// check gravity
if ((mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL) {
// draw the content centered vertically
} else if ((mGravity & Gravity.BOTTOM) == Gravity.BOTTOM) {
// draw the content at the bottom
}
wheremGravity是从 xml 属性中获得的(像这样)。
如果我将重力设置为Gravity.CENTER_VERTICAL它工作正常。但我惊讶地发现,如果我将它设置为Gravity.BOTTOM,Gravity.CENTER_VERTICAL检查仍然是真的!
为什么会这样?
我不得不查看二进制值以了解原因:
- 二进制:
0001 0000,Gravity.CENTER_VERTICAL:常量值:16(0x00000010) - 二进制:
0101 0000,Gravity.BOTTOM:常量值:80(0x00000050)
因此,当我这样做时
mGravity = Gravity.BOTTOM;
(mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL
// (0101 & 0001) == 0001
我得到一个误报。
我该怎么办?
那么我应该如何检查重力标志呢?
我可以做类似的事情if (mGravity == Gravity.CENTER_VERTICAL),但我只会得到完全匹配。如果用户将重力设置为类似的东西,center_vertical|right那么它将失败。