在Android中删除Paint Flag

Jam*_*mes 78 android bitwise-operators

我的代码看起来像这样:

    TextView task_text = (TextView) view.findViewById(R.id.task_text);
    task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Run Code Online (Sandbox Code Playgroud)

这会导致通过效果出现在文本上.但是,我想知道如何设置删除标志,以及如何检测标志已设置.

我理解这是一个按位操作,但我已经尝试了两个〜和 - 运算符,都没有工作.

MBy*_*ByD 179

要删除标志,这应该工作:

task_text.setPaintFlags( task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
Run Code Online (Sandbox Code Playgroud)

这意味着设置所有设置标志,除了Paint.STRIKE_THRU_TEXT_FLAG.

检查是否设置了标志(编辑:暂时我忘了它是java ...):

if ((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0)
Run Code Online (Sandbox Code Playgroud)

  • 另一个简单的解决方案就是使用Paint上提供的各种方法:) (3认同)

aru*_*n-r 23

这也有效:

task_text.setPaintFlags(0);
Run Code Online (Sandbox Code Playgroud)

  • 不要这样做。这将删除所有标志,而不仅仅是特定的标志。 (4认同)
  • 我认为这是一个奇怪的情况,不使用正确的更正确,因为没有理由检查这里的条件,你只需要 2 种情况,设置 Paint.Flag 或将其删除,很好的解决方案。 (2认同)

Ado*_*els 8

在科特林

task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
Run Code Online (Sandbox Code Playgroud)


XII*_*-th 6

使用异或运算符^,而不是|&(~)组合:

// 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));
Run Code Online (Sandbox Code Playgroud)

检查当前是否设置了标志:

if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG)
Run Code Online (Sandbox Code Playgroud)


小智 6

在我看来,只设置它的默认标志是更好的选择。否则,文本将看起来有锯齿。TextView (EditText extends TextView) 中的默认标志是

Paint.ANTI_ALIAS_FLAG
Run Code Online (Sandbox Code Playgroud)

并设置一个新的paintflag 将替换之前的一个。我做了一个测试来验证它。所以,就像这样:

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
Run Code Online (Sandbox Code Playgroud)


Suj*_*U N 5

|------------------------------------------------- -|
|<*>| 用 textView 下划线:
|-------------------------------------------- ------|

|*| 添加下划线:

 txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Run Code Online (Sandbox Code Playgroud)

|*| 删除下划线:

txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
Run Code Online (Sandbox Code Playgroud)

|*| 检查下划线:

if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
{
    // Codo Todo
}
Run Code Online (Sandbox Code Playgroud)

|*| 切换下划线:

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);
}
Run Code Online (Sandbox Code Playgroud)