2011-07-22 15 views
61

Mój kod wygląda następująco:usuwanie flagi malowania na Androida

TextView task_text = (TextView) view.findViewById(R.id.task_text); 
    task_text.setPaintFlags(task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

Powoduje strajk poprzez efekt pojawiać się na tekście. Chciałbym jednak wiedzieć, jak usunąć flagę po ustawieniu i jak wykryć, że flaga jest ustawiona.

Rozumiem, że jest to operacja bitowa, ale próbowałem zarówno operatorów ~ jak ​​i - ani pracy.

Odpowiedz

150

Aby usunąć flagę, to powinno działać:

task_text.setPaintFlags(task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG)); 

Co oznacza ustawić wszystkie ustawione flagi, z wyłączeniem Paint.STRIKE_THRU_TEXT_FLAG.

Aby sprawdzić, czy flaga jest ustawiona (Edit: na chwilę zapomniałem to jest Java ...):

if ((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0) 
+3

Kolejnym prostym rozwiązaniem jest po prostu użycie różnych metod dostępnych na Paint :) –

+5

, aby usunąć flagę zrobić TO: textView.setPaintFlags (0); ..: p –

+0

@ Dr.aNdRO Próbowałem i to nie działa dla mnie. Czy jest coś jeszcze, co muszę zrobić? – Monica

14

Działa to również:

task_text.setPaintFlags(0); 
+0

Myślę, że jest to dziwny przypadek, w którym nie używanie poprawnych jest bardziej bezpodstawne, ponieważ nie ma powodu, aby sprawdzić warunki tutaj, wystarczy 2 przypadki, ustawić Paint.Flag lub usunąć go, świetne rozwiązanie. – cutiko

+1

Nie rób tego. Spowoduje to usunięcie WSZYSTKICH flag, a nie tylko jednego. –

3

Korzystając exclusive OR operator ^ 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 obecnie setup:

if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG) 
+0

Dziękujemy @Sergey Jest to jedyna solidna odpowiedź tutaj. 1) Sprawdź, czy flaga, którą chcesz usunąć, jest obecna. 2) Jeśli tak, usuń go za pomocą XOR. Chciałbym, aby użytkownicy przestali odnawiać odpowiedzi, które wymagają ustawienia paintFlags na 0 lub użycie XOR przed sprawdzeniem, czy flaga do usunięcia jest obecna. –

0

| --------------------------------- ----------------- |
| < *> | Podkreśl z tekstemView:
| ------------------------------------------ -------- |

| * | Dodaj Podkreślenie:

txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 

| * | Usunąć podkreślenie:

txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags()^Paint.UNDERLINE_TEXT_FLAG); 

| * | Sprawdzić Podkreślenie:

if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG) 
{ 
    // Codo Todo 
} 

| * | Przegubowe 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); 
} 
0

Moim zdaniem wystarczy ustawić jego domyślne flagi jest lepszym wyborem. W przeciwnym razie tekst będzie wyglądał na postrzępiony. Domyślną flagą w TextView (EditText rozszerza TextView) jest I ustawić nowy paintflag zastąpi poprzedni. Zrobiłem test, aby to zweryfikować. Tak, podobnie jak to:

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);