Удаление флага краски в Android
Мой код выглядит следующим образом:
TextView task_text = (TextView) view.findViewById(R.id.task_text);
task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Это приводит к появлению эффекта удара по тексту. Тем не менее, я хотел бы знать, как удалить флаг после его установки, и как определить, что флаг установлен.
Я понимаю, что это побитовая операция, но я пробовал работать как с ~, так и с операторами. Не работает.
Ответы
Ответ 1
Чтобы удалить флаг, это должно работать:
task_text.setPaintFlags( task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
Что означает установить все установленные флаги, кроме Paint.STRIKE_THRU_TEXT_FLAG
.
Чтобы проверить, установлен ли флаг (Edit: на мгновение я забыл, что это java...):
if ((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0)
Ответ 2
Это также работает:
task_text.setPaintFlags(0);
Ответ 3
Используйте эксклюзивный оператор OR ^
вместо |
с комбинацией &(~)
:
// setup STRIKE_THRU_TEXT_FLAG flag if current flags not contains it
task_text.setPaintFlags(task_text.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG));
// second call will remove STRIKE_THRU_TEXT_FLAG
task_text.setPaintFlags(task_text.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG));
Проверьте, установлен ли флаг:
if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG)
Ответ 4
| ---------------------------------------------- ---- |
| & Л; * > | Подчеркните с помощью textView:
| ------------------------------------------------- - |
| * | Добавить подчеркивание:
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
| * | Удалить подчеркивание:
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
| * | Проверьте Подчеркивание:
if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
{
// Codo Todo
}
| * | Переключить подчеркивание:
if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
{
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
}
else
{
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
}
Ответ 5
По-моему,
просто установите флаг по умолчанию - лучший выбор. В противном случае текст будет выглядеть зубчатым. Флаг по умолчанию в TextView (EditText extends TextView) имеет значение
Paint.ANTI_ALIAS_FLAG
И установить новый paintflag заменит предыдущий. Я проверил его. Итак, вот так:
task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
Ответ 6
В котлине
task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()