在设置某些属性时,竖线 (|) 运算符如何在 Android 中工作?

How does the pipe (|) operator work in Android while setting some properties?

我的问题可能很基础,但我想知道管道运算符在 Android 中的以下上下文中如何工作:

我们可以在布局中设置多种输入类型:

android:inputType = "textAutoCorrect|textAutoComplete"

我们可以为一个意图设置多个标志,如下所示:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_ACTIVITY_CLEAR_TOP);

我们还可以设置一些属性如下:

tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

我们可以在 Android.

中看到这样的例子。

所以我的问题是,| 运算符是像按位或运算符一样工作,还是只是连接结果或其他东西?
如果它的行为类似于按位或运算符,那么它如何使预期结果正确呢?有谁能给我讲讲吗?

java中的管道是按位或。
在某些 Android 属性中使用它时,它在概念上会做同样的事情。
这是添加了管道分隔的选项。

是的,它是一个bitwise inclusive OR操作,主要用于设置标志(documentation)。考虑以下标志:

byte flagA = 0b00000001;
byte flagB = 0b00000100;

如果我们使用 | 运算符,这两个标志将组合在一起:

byte flags = flagA | flagB; // = 0b00000101

这允许我们在少量内存中设置属性或其他少量状态信息(通常是具有最多 Android 标志的整数)。

请注意,标志应该只有一位 "active",即值等于 2^n。当我们使用 bitwise AND 运算符检查组合标志持有者变量时,这就是我们知道设置了哪些标志的方式,例如

if ((flags & flagA) == flagA) {
    // Flag A has been set
    ...
}