web-dev-qa-db-ja.com

Androidのペイントフラグを削除する

私のコードは次のようになります。

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

これにより、取り消し線効果がテキストに表示されます。ただし、一度設定されたフラグを削除する方法と、フラグが設定されたことを検出する方法を知りたいです。

これはビット単位の操作であることは理解していますが、〜演算子と-演算子の両方を試しましたが、どちらも機能しません。

76
James

フラグを削除するには、これが機能するはずです:

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)
176
MByD

これも機能します:

task_text.setPaintFlags(0);
22
arun-r

コトリンで

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

&(~)の組み合わせで^の代わりに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)
5
XIII-th

| ------------------------------------------------- -|
| <*> | 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);
}
2
Sujay U N

私の意見では、デフォルトのフラグを設定するだけの方が良い選択です。それ以外の場合、テキストはギザギザに見えます。 TextView(EditTextはTextViewを拡張)のデフォルトフラグは

Paint.ANTI_ALIAS_FLAG

そして、新しいペイントフラグを設定すると、以前のものが置き換えられます。私はそれを検証するためのテストを行いました。だから、このように:

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
0
三点一四