Проблема
У меня есть пользовательский вид 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
}
где mGravity
получается из атрибутов xml (как это).
Если я устанавливаю значение силы тяжести на Gravity.CENTER_VERTICAL
, он работает нормально. Но я с удивлением обнаружил, что если я установил его в Gravity.BOTTOM
, проверка Gravity.CENTER_VERTICAL
по-прежнему верна!
Почему это происходит?
Мне пришлось посмотреть двоичные значения, чтобы понять, почему:
- Binary:
0001 0000
,Gravity.CENTER_VERTICAL
: Постоянное значение: 16 (0x00000010) - Binary:
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
, тогда он потерпит неудачу.