Android TextView:取消之前被划掉的文本

12 浏览
0 Comments

Android TextView:取消之前被划掉的文本

我在互联网上搜索到,要取消删除线文本,我需要使用以下代码:

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

其中tv是某个TextView变量。但是这对我来说不起作用。我错过了什么吗?

非常感谢你的帮助。

以下是布局文件中一个TextView小部件的定义:

 

你看到了什么问题吗?

以下是整个代码:

public class MyClass extends Activity {
TextView tv1;
TextView tv2;
...
TextView tv55;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grandlotto_655);
    tv1 = (TextView) findViewById(R.id.tv1);
    tv2 = (TextView) findViewById(R.id.tv2);
    ...
    tv55 = (TextView) findViewById(R.id.tv55);
    // 省略其他代码
}
View.OnClickListener myHandler = new View.OnClickListener() {
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.tv1:
                strike(tv1);
                break;
            ...
            case R.id.tv55:
                strike(tv55);
                break;
            default:
                break;
        }
        }    
        };
public void strike(TextView tv) {
    if ((tv.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0) {
        tv.getPaint().setStrikeThruText(false);
    }
    if ((!((tv.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0)) && totalNrOfStrikes < 36) {
        // 省略其他代码
        tv.setPaintFlags( tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);    
    }
}
}

0
0 Comments

问题原因:原作者使用了连续的简单 if 语句,而实际上需要使用 if...else if...else... 结构。

解决方法:修改 if 语句的结构,将连续的简单 if 语句修改为 if...else if...else... 结构。

if (...) {
    // code block
} else if (...) {
    // code block
} else {
    // code block
}

这样修改后,问题得到解决。

0
0 Comments

问题出现的原因是在点击TextView时,想要取消之前添加的删除线效果,但是无法成功取消删除线。解决方法是重新创建一个相同的TextView,但是不添加删除线效果。

代码如下:

// 在点击TextView时调用的方法
public void onClick(View v) {
    TextView textView = (TextView) v;
    boolean isStrikethrough = isStrikethrough(textView);
    if (isStrikethrough) {
        removeStrikethrough(textView);
    } else {
        addStrikethrough(textView);
        // 其他操作
    }
}
// 判断TextView是否有删除线效果
private boolean isStrikethrough(TextView textView) {
    int flags = textView.getPaintFlags();
    return (flags & Paint.STRIKE_THRU_TEXT_FLAG) != 0;
}
// 给TextView添加删除线效果
private void addStrikethrough(TextView textView) {
    textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
// 移除TextView的删除线效果
private void removeStrikethrough(TextView textView) {
    textView.setPaintFlags(textView.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}

通过以上代码,点击TextView时会判断是否有删除线效果,如果有则移除删除线效果,如果没有则添加删除线效果。这样就可以实现取消之前的删除线效果。

0