8

setFlags が行うことは、古いフラグを新しいフラグに置き換えることです。そして addFlags はさらにフラグを追加しています。私が見た setFlags メソッドの引数が通常同じなのはなぜですか? 例えば:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//or
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

android.view.Window クラスを見た後、なぜ多くの二項演算子 (NOT、AND、OR) を実行しなければならないのかが明確ではありません。これの目的は何ですか?

public void setFlags(int flags, int mask) {
        final WindowManager.LayoutParams attrs = getAttributes();
        attrs.flags = (attrs.flags & ~mask) | (flags & mask);
        mForcedWindowFlags |= mask;
        dispatchWindowAttributesChanged(attrs);
    }

もう1つの質問、違いは何ですか

//argument is a flag
getWindow().addFlags(flag1);

//argument is the result of OR operator of 2 identical flags
getWindow().addFlags(flag1 | flag1);

//argument is the result of OR operator of 2 different flags
getWindow().addFlags(flag1 | flag2);

//argument is the result of AND operator of 2 identical flags
getWindow().addFlags(flag1 & flag1);

//argument is the result of AND operator of 2 different flags
getWindow().addFlags(flag1 & flag2);

どんな助けでも大歓迎です。

4

2 に答える 2