我是android和学习java的新手。在最近的指南中,我遇到了将密码字段切换到普通文本字段的方法。
有人可以在此声明中解释使用|
吗?
final EditText input = (EditText) findViewById(R.id.etCommands);
if(passTog.isChecked())
{
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
input.setInputType(InputType.TYPE_CLASS_TEXT);
}
对此有任何帮助将不胜感激。提前谢谢。
编辑:
我需要知道 按位OR 在这里是如何工作的? 这是完整的代码,以避免变量的含糊不清:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.text);
Button checkCommand = (Button)findViewById(R.id.bResults);
final ToggleButton passTog = (ToggleButton) findViewById(R.id.tbPassword);
final EditText input = (EditText) findViewById(R.id.etCommands);
TextView display = (TextView) findViewById(R.id.tvResults);
passTog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(passTog.isChecked()){
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
input.setInputType(InputType.TYPE_CLASS_TEXT);
}
}
});
}
答案 0 :(得分:9)
该代码未在|
语句中使用if
。它在if
语句的正文中使用它是非常不同的。在那里使用时,它是bitwise-or操作。 编辑: @RohitJain在评论中提供了比我更好的链接:http://en.wikipedia.org/wiki/Bitwise_operation#OR
如果它在if
语句中使用,如下所示:
if (foo() | bar())
表示“不要短路”。如果foo()
返回“true”,它仍会评估bar()
。如果您使用||
而foo()
返回“true”,则不会评估bar()
,因为它知道if
语句的结果将为“true”,无论是什么别的发生了。
针对您的具体问题,您可以看到InputType
here的可能值。
InputType.TYPE_CLASS_TEXT = Constant Value: 1 (0x00000001)
InputType.TYPE_TEXT_VARIATION_PASSWORD = Constant Value: 128 (0x00000080)
使用this tool,我计算了按位的结果,或者是:12。要了解如何获取该值,请阅读上面的维基百科文章。
答案 1 :(得分:1)
这是按位OR运算符 - 有关详细信息,请参阅this
答案 2 :(得分:1)
| is a Bitwise inclusive OR
|| is a Conditional-OR
按位OR采用相等长度的两个位模式,并对每对相应位执行逻辑包含OR运算。如果第一位为1或第二位为1或两位均为1,则每个位置的结果为1;否则,结果为0.例如:
0101 (decimal 5)
OR 0011 (decimal 3)
= 0111 (decimal 7)
答案 3 :(得分:1)
“|”符号定义为按位包含OR
来源:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
| (按位包含OR)运算符比较每个操作数的值(以二进制格式),并产生一个值,其位模式显示任一操作数中的哪些位的值为1.如果两个位均为0,则该位的结果是0;否则,结果是1。
答案 4 :(得分:1)
您应该始终做的第一件事是查阅文档。
这是link to the documentation for InputType
这是页面上的第一件事:
A password field with with the password visible to the user:
inputType = TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
它实际上是页面上的第三句。
答案 5 :(得分:0)
|表示按位OR
||意味着逻辑OR
答案 6 :(得分:0)
|
对常量InputType.TYPE_CLASS_TEXT
和InputType.TYPE_TEXT_VARIATION_PASSWORD
进行了定位。我假设这两个常量是用于识别EditText
对象所关心的内部类型的int,给定格式,但它可以是任何变量类型。如果确实想知道正好它正在做什么,你需要知道InputType.TYPE_CLASS_TEXT
的数据类型,但我们可以假设感谢Java代码的常见做法以后它会将常数粘在一起进行比较。