[android] Android에서 페인트 플래그 제거

내 코드는 다음과 같습니다.

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

이렇게하면 텍스트에 스트라이크 스루 효과가 나타납니다. 그러나 일단 설정된 플래그를 제거하는 방법과 플래그가 설정된 것을 감지하는 방법을 알고 싶습니다.

나는 이것이 비트 연산이라는 것을 이해하지만 ~ 및-연산자를 모두 시도했지만 둘 다 작동하지 않습니다.



답변

플래그를 제거하려면 다음과 같이 작동해야합니다.

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

이는를 제외한 모든 설정된 플래그를 설정하는 것을 의미합니다 Paint.STRIKE_THRU_TEXT_FLAG.

플래그가 설정되어 있는지 확인하려면 (편집 : 잠시 동안 Java라는 것을 잊었습니다 …) :

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


답변

이것은 또한 작동합니다 :

task_text.setPaintFlags(0);


답변

Kotlin에서

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


답변

사용 배타적 논리합 연산자 ^대신 |&(~)조합 :

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

플래그가 현재 설정되어 있는지 확인하십시오.

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


답변

| ————————————————- -|
| <*> | textView로 밑줄 :
| ——————————————– —— |

| * | 밑줄 추가 :

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

| * | 밑줄 제거 :

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

| * | 밑줄 확인 :

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

| * | 밑줄 전환 :

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


답변

제 생각에는 기본 플래그를 설정하는 것이 더 나은 선택입니다. 그렇지 않으면 텍스트가 들쭉날쭉하게 보입니다. TextView의 기본 플래그 (EditText는 TextView를 확장 함)는 다음과 같습니다.

Paint.ANTI_ALIAS_FLAG

그리고 새 페인트 플래그를 설정하면 이전 페인트 플래그가 대체됩니다. 나는 그것을 확인하기 위해 테스트를했다. 그래서 다음과 같이 :

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);


답변