Мой код выглядит так:
TextView task_text = (TextView) view.findViewById(R.id.task_text);
task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
В результате на тексте появляется эффект зачеркивания. Однако я хотел бы знать, как удалить установленный флаг и как определить, что он установлен.
Я понимаю, что это побитовая операция, но я пробовал оба оператора ~ и -, ни один из них не работает.
android
bitwise-operators
Джеймс
источник
источник
to remove a
, что он удалит ВСЕ флаги.Это тоже работает:
task_text.setPaintFlags(0);
источник
В Котлине
task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
источник
tvPhone.autoLinkMask = Linkify.ALL
, затемtvPhone.text = "1-800-12345"
, тогдаtvPhone.paintFlags = tvPhone.paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()
Используйте исключающего ИЛИ оператор
^
вместо|
с&(~)
комбинацией:// 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)
источник
| ------------------------------------------------- - |
| <*> | Подчеркнуть с помощью 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); }
источник
На мой взгляд, лучше просто установить флаг по умолчанию. В противном случае текст будет выглядеть неровным. Флаг по умолчанию в TextView (EditText расширяет TextView):
Paint.ANTI_ALIAS_FLAG
И установить новый Paintflag заменит предыдущий. Я сделал тест, чтобы это проверить. Итак, вот так:
task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
источник