在Android中删除Paint Flag

时间:2011-07-22 22:36:10

标签: android bitwise-operators

我的代码如下所示:

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

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

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

6 个答案:

答案 0 :(得分:171)

要删除标记,这应该有效:

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)

答案 1 :(得分:21)

这也有效:

task_text.setPaintFlags(0);

答案 2 :(得分:4)

使用独占OR 运算符^代替|&(~)组合:

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

答案 3 :(得分:4)

在科特林

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

答案 4 :(得分:2)

| ---------------------------------------------- ---- |
|&LT * GT; |用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);
}

答案 5 :(得分:0)

在我看来, 只需设置其默认标志是一个更好的选择。否则,文本将显示为锯齿状。 TextView中的默认标志(EditText扩展TextView)是

Paint.ANTI_ALIAS_FLAG

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

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);