Android TextView:取消之前被划掉的文本
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); } } }
问题出现的原因是在点击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时会判断是否有删除线效果,如果有则移除删除线效果,如果没有则添加删除线效果。这样就可以实现取消之前的删除线效果。