Проблема
У меня есть пользовательский вид 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, тогда он потерпит неудачу.