Java onClickListener仅在按下软键盘后调用
我写了一个android应用程序 我设置了一个Java onClickListener仅在按下软键盘后调用,java,android,keyboard,onclicklistener,Java,Android,Keyboard,Onclicklistener,我写了一个android应用程序 我设置了一个editText.setOnClickListener(…) 但我看到,当用户点击时,软键盘打开,只有 当用户单击键盘键时,调用onClick() 如何在打开软键盘之前捕捉点击 我想避免键盘打开 这是我的密码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView
editText.setOnClickListener(…)
但我看到,当用户点击时,软键盘打开,只有
当用户单击键盘键时,调用onClick()
如何在打开软键盘之前捕捉点击
我想避免键盘打开
这是我的密码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.phone_login);
initMembers();
setOnClickListeners();
initFieldsTexts();
setKeyboardVisibilityListener();
}
private void setOnClickListeners() {
mPhoneNumberField.setInputTextOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setResult(RESULT_CANCELED);
finish();
}
});
}
以及:
在调试期间,我看到这行被调用了两次
mPhoneNumberField.setInputExtonClickListener(新的OnClickListener(){
虽然只从onCreate调用它,并且
setOnClickListeners();
只调用一次将onTouchListener设置为EditView。请记住返回true以避免事件传播。您的意思是EditText不应获得焦点;它只需要响应单击事件。执行以下操作:
editText.setFocusableInTouchMode(false);
然后继续:
editText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Your code...
}
}
所以你不想在单击edittext时键盘打开?我想将用户移动到另一个视图而不是其他视图。你可以发布你的代码以便更好地理解吗?顺便说一句,调试时,我看到设置onClickListener的代码执行了两次。虽然它只从“onCreate”调用了一次。为什么?不应该设置两次。如果您在Eclipse中调试,并且在设置onClickListener的位置和按Step Over(F6)时有一个断点你看,它让你保持一致,这没什么好担心的。它只是初始化新的onClick Listener,然后将其设置为你的EditText。我认为在Android Studio和InteliJ中的行为是相同的。另一方面,如果它真的在重写的onClick()中执行代码方法两次,则确实存在问题。您应该发布代码以获得更多帮助。您发布的代码没有问题。我不知道问题的确切原因。您没有指定是否意外调用重写的onClick方法。我的意思是,如果此代码块是在onCreate:setResult(RESULT\u cancelled);finish()中执行的;为什么在
public void onClick(View v)
中没有布尔返回?您能更好地解释这个传播问题吗?View.onTouch方法返回“如果侦听器已使用事件,则返回True,否则返回false”。在第二种情况下,事件将传播到视图层次结构,以便父视图可以自行处理事件。在您的情况下,您将在editText中使用事件,因此必须在onTouch方法中返回true。为什么在public void onClick(视图v)中没有布尔返回?
editText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Your code...
}
}