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 -.
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)
Cela fonctionne aussi:
task_text.setPaintFlags(0);
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)
| ----------------------------------------------------- - |
| <*> | 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);
}
À Kotlin
task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
À 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);