0

我是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);
}

对此的任何帮助将不胜感激。提前致谢。

编辑:

我需要知道这个 按位或 实际上是如何工作的? 这是完整的代码,以避免变量的歧义:

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);
            }

        }
    });

}
4

7 回答 7

9

该代码未|if语句中使用。它在声明的正文中使用它,if这是非常不同的。在那里使用时,它是按位或运算。 编辑: @RohitJain 在他的评论中提供了比我更好的链接:http ://en.wikipedia.org/wiki/Bitwise_operation#OR


如果if在这样的语句中使用它:

if (foo() | bar())

这意味着“不要短路”。如果foo()返回“true”,它仍然会评估bar(). 如果您使用||foo()返回“true”,它将不会评估bar(),因为它知道if无论发生什么其他情况,语句的结果都将为“true”。


InputType对于您的具体问题,您可以在此处查看可能的值。

InputType.TYPE_CLASS_TEXT = Constant Value: 1 (0x00000001)
InputType.TYPE_TEXT_VARIATION_PASSWORD = Constant Value: 128 (0x00000080)

使用这个工具,我计算了按位或将是:129。要了解如何获得该值,请阅读上面的维基百科文章。

于 2013-07-18T20:41:54.730 回答
1

这是按位或运算符 - 详情参阅

于 2013-07-18T20:43:44.297 回答
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)

检查这个这个

于 2013-07-18T20:45:05.763 回答
1

“|” 符号被定义为按位或

来源:http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

该| (按位或)运算符比较每个操作数的值(以二进制格式)并产生一个值,其位模式显示任一操作数中的哪些位具有值 1。如果两个位都是 0,则该位的结果为 0;否则,结果为 1。

资料来源:http: //publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp ?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htm

于 2013-07-18T20:45:26.357 回答
1

您应该始终做的第一件事是查阅文档。

这是指向文档的链接InputType

这是页面上的第一件事

A password field with with the password visible to the user:

    inputType = TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

这实际上是页面上的第三句话

于 2013-07-18T21:07:09.370 回答
0

| 表示按位或

|| 表示逻辑或

于 2013-07-18T20:43:26.620 回答
0

是对|常数InputType.TYPE_CLASS_TEXT和进行按位或运算InputType.TYPE_TEXT_VARIATION_PASSWORD。我假设这两个常量是用于识别EditText对象关心的内部类型的整数,给定格式,但它可以是任何变量类型。如果你真的确切地知道它在做什么,你需要知道 的数据类型InputType.TYPE_CLASS_TEXT,但是我们可以假设感谢 Java 代码的常见做法,它将常量粘在一起以便稍后进行比较。

于 2013-07-18T21:12:28.677 回答