Edittext Focus并单击

时间:2016-02-26 10:06:47

标签: android android-edittext focus

我有两个EditText个。我希望On First EditText点击清除第二个和第二个edittext点击清除第一个。所以我尝试了OnClickListenerOnTouchListener。但它运作不正常。

 et_email.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (!(et_email.getText().toString().equalsIgnoreCase("") && et_mobile.getText().toString().equalsIgnoreCase(""))) {
                    if (MotionEvent.ACTION_UP == event.getAction()) {
                        et_mobile.setText("");
                        et_mobile.setFocusableInTouchMode(true);
                        et_mobile.setFocusable(true);
                        et_mobile.requestFocus();
                    }
                    return true; // return is important...
                } else
                    return false;
            }
        });
        et_mobile.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (!(et_email.getText().toString().equalsIgnoreCase("") && et_mobile.getText().toString().equalsIgnoreCase(""))) {
                    if (MotionEvent.ACTION_UP == event.getAction()) {
                        et_email.setText("");
                        et_mobile.setFocusableInTouchMode(true);
                        et_mobile.setFocusable(true);
                        et_mobile.requestFocus();
                    }
                    return true; // return is important...
                }
                else
                    return false;
            }
        });

但问题是Focus没有在第一次触摸时设置,在点击时无法清除EditText

3 个答案:

答案 0 :(得分:1)

首先将其添加到Edittext布局:

android:focusableInTouchMode="false" 

如果没有此行,EditText将对触摸模式作出反应,并且只在您第二次点击EditText栏时收听 onClick()。 这将禁用EditText的触摸模式,并在第一次触发 onClick()

  

focusableInTouchMode

     

注意:布尔值,用于控制视图在触摸模式下是否可以获得焦点。如果对于视图是这样,则该视图在单击时可以获得焦点,并且如果单击另一个没有将此属性设置为true的视图,则可以保持焦点。

比如下: 的 EditText1

EditText et_email = (EditText) findViewById(R.id.yourEditText1);
et_email.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //do this
        et_mobile.setText("");

        //or this
        et_mobile.getText().clear();         
    }
});

<强> EditText2

EditText et_mobile = (EditText) findViewById(R.id.yourEditText2);
et_mobile.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //do this
        et_email.setText("");

        //or this
        et_email.getText().clear();         
    }
});

这应该可以帮到你。

答案 1 :(得分:0)

您正在清除触及第一个的第一个,在第一个侦听器中更改您的变量名称

if (!(et_email.getText().toString().equalsIgnoreCase("") && et_mobile.getText().toString().equalsIgnoreCase(""))) {
    if (MotionEvent.ACTION_UP == event.getAction()) {
        et_mobile.setText("");
        et_email.setFocusableInTouchMode(true);
        et_email.setFocusable(true);
        et_email.requestFocus();
    }
    return true; // return is important...
} else

答案 2 :(得分:0)

我希望这段代码可以帮助你(对我有用)

    edit1 = (EditText) findViewById(R.id.edit1);
    edit2 = (EditText) findViewById(R.id.edit2);



    edit1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            edit2.setText("");
        }
    });

    edit2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            edit1.setText("");
        }
    });