Mój kod wygląda tak:
TextView task_text = (TextView) view.findViewById(R.id.task_text);
task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Powoduje to pojawienie się efektu przekreślenia w tekście. Chciałbym jednak wiedzieć, jak usunąć ustawioną flagę i jak wykryć, że flaga jest ustawiona.
Rozumiem, że jest to operacja bitowa, ale wypróbowałem zarówno operatory ~, jak i -, ale żadne z nich nie działa.
android
bitwise-operators
James
źródło
źródło
to remove a
, podczas gdy usunie WSZYSTKIE flagi.Działa to również:
task_text.setPaintFlags(0);
źródło
W Kotlinie
task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
źródło
tvPhone.autoLinkMask = Linkify.ALL
, atvPhone.text = "1-800-12345"
więctvPhone.paintFlags = tvPhone.paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()
Używać wyłącznego lub operatora
^
zamiast|
z&(~)
kombinacji:// 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));
Sprawdź, czy flaga jest aktualnie ustawiona:
if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG)
źródło
| ------------------------------------------------- - |
| <*> | Podkreśl tekstem:
| -------------------------------------------- ------ |
| * | Dodaj podkreślenie:
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
| * | Usuń podkreślenie:
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
| * | Sprawdź Podkreśl:
if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG) { // Codo Todo }
| * | Przełącz podkreślenie:
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); }
źródło
Moim zdaniem wystarczy ustawić jego domyślną flagę, to lepszy wybór. W przeciwnym razie tekst będzie wyglądał na poszarpany. Domyślna flaga w TextView (EditText rozszerza TextView) to
Paint.ANTI_ALIAS_FLAG
I ustawić nową farbę, która zastąpi poprzednią. Zrobiłem test, aby to zweryfikować. Więc tak po prostu:
task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
źródło