2011-07-22 19 views
61

Mi código es el siguiente:Eliminar un indicador de pintura en Android

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

Esto provoca una huelga a través del efecto que aparezcan en el texto. Sin embargo, me gustaría saber cómo quitar la bandera una vez configurada, y cómo detectar que la bandera está configurada.

Entiendo que se trata de una operación bit a bit, pero he probado tanto ~ como - los operadores, ninguno de los dos funciona.

Respuesta

150

Para quitar una bandera, esto debería funcionar:

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

Lo que significa establecer todos los indicadores establecidos, a excepción de Paint.STRIKE_THRU_TEXT_FLAG.

Para comprobar si se ha establecido una bandera (Edit: por un momento olvidé que es java ...):

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

Otra solución fácil es simplemente usar los diversos métodos proporcionados en la pintura :) –

+5

para quitar una bandera hacer esto: Vista de Texto.setPaintFlags (0); ..: p –

+0

@ Dr.aNdRO Lo intenté y no funciona para mí. ¿Hay algo más que deba hacer? – Monica

14

Esto también funciona:

task_text.setPaintFlags(0); 
+0

Creo que este es un caso extraño en el que no usar el correcto es más correcto, porque no hay ninguna razón para verificar las condiciones aquí, solo quiere 2 casos, configure Paint.Flag o elimínelo, gran solución. – cutiko

+1

No hagas esto. Esto elimina TODOS los indicadores, no solo uno en particular. –

3

Uso O exclusivo^ operador en lugar de | con &(~) combinación:

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

Comprobar si la bandera se pone actualmente:

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

Gracias @Sergey Esta es la única respuesta sólida aquí. 1) Compruebe si la bandera que desea eliminar está presente. 2) Si es así, elimínelo usando un XOR. Deseo que los usuarios dejen de votar respuestas que impliquen establecer PaintFlags en 0 o usar XOR antes de verificar si la bandera para eliminar está presente. –

0

| --------------------------------- ----------------- |
| < *> | Subrayar con un textView:
| ------------------------------------------ -------- |

| * | Añadir Subrayado:

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

| * | Retire Subrayado:

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

| * | Compruebe Subrayado:

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

| * | Alternar Subrayado:

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

En mi opinión, acaba de establecer su bandera por defecto es una mejor opción. De lo contrario, el texto se verá irregular. La bandera defecto en Vista de Texto (EditarTexto extiende Vista de Texto) es

Paint.ANTI_ALIAS_FLAG 

y establecer un nuevo paintflag sustituirá a la anterior. He realizado una prueba para verificarlo. Por lo tanto, al igual que este:

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG); 
Cuestiones relacionadas