web-dev-qa-db-fra.com

Supprimer un drapeau 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 une frappe par effet sur le texte. Cependant, j'aimerais savoir comment supprimer l'indicateur une fois défini et comment le détecter.

Je comprends que c’est une opération binaire, mais j’ai essayé les opérateurs ~ et -.

73
James

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: pendant un moment j'ai oublié que c'est Java ...):

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

Cela fonctionne aussi:

task_text.setPaintFlags(0);
17
arun-r

Utilisez exclusif OR opérateur ^ au lieu de | avec la 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 l'indicateur est actuellement installé:

if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG)
3
XIII-th

| ----------------------------------------------------- - |
| <*> | Souligner avec un textView:
| -------------------------------------------------- ---- |

| * | Ajouter soulignement:

 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 souligné:

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);
}
2
Sujay U N

À Kotlin 

task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
2
Adobels

À mon avis, Juste définir son drapeau par défaut est un meilleur choix. Sinon, le texte sera considéré comme déchiqueté. L'indicateur 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. Alors, juste comme ça: 

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
0
三点一四