私のコードは次のようになります。
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);
コトリンで
task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
&(~)
の組み合わせで^
の代わりにexclusive OR operator |
を使用します。
// 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);