Supprimer un indicateur de peinture dans Android

Mon code ressemble à ceci:

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

Cela provoque un effet de grève sur le texte. Cependant, j’aimerais savoir comment supprimer le drapeau une fois défini et comment détecter que le drapeau est défini.

Je comprends que c’est une opération au niveau du bit, mais j’ai essayé les deux opérateurs ~ et -, ni les deux.

Pour supprimer un drapeau, cela devrait fonctionner:

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

Ce qui signifie définir tous les indicateurs définis, à l’exception de Paint.STRIKE_THRU_TEXT_FLAG .

Pour vérifier si un drapeau est défini (Edit: pour un moment j’ai oublié que c’est java …):

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

Cela fonctionne aussi:

 task_text.setPaintFlags(0); 

Utilisez l’opérateur OU exclusif ^ au lieu de | avec &(~) combinaison:

 // 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)); 

Vérifiez si le drapeau est actuellement configuré:

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

| ————————————————- – |
| <*> | Souligné avec un textView:
| ————————————————- – |

| * | Ajouter Souligné:

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

| * | Supprimer le soulignement:

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

| * | Vérifier le soulignement:

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

| * | Basculer le soulignement:

 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); } 

À mon avis, juste définir son drapeau par défaut est un meilleur choix. Sinon, le texte sera déchiqueté. Le drapeau par défaut dans TextView (EditText étend TextView) est

 Paint.ANTI_ALIAS_FLAG 

Et définir un nouveau paintflag remplacera le précédent. J’ai fait un test pour le vérifier. Donc, juste comme ça:

 task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);