问题
我有一个自定义的 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
那么它将失败。