我有一个edittext,当用户点击这个edittext时,我想显示一个alertdialog 我的代码如下:
edt.setInputType(InputType.TYPE_NULL);
edt.setFocusableInTouchMode(true);
edt.requestFocus();
edt.setCursorVisible(false);
edt.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
CommentDialog.buildDialog(mContext, identifier, false, edt.getId());
}
});
我不希望在用户点击edittext时显示键盘,因此我将inputtype设置为TYPE_NULL。
但是当edittext没有焦点并且我单击它时,onClick事件不会被执行。当我再次单击它时,alertdialog会正确显示。
我该如何解决这个问题?
答案 0 :(得分:114)
只需尝试将其添加到您的XML
文件中即可。 widget
获得焦点时,键盘会弹出。
因此,要防止此行为设置为false
。然后正常使用OnClickListener
。
<EditText
android:focusable="false"
...
/>
现在,它应该有效。
答案 1 :(得分:21)
您可以使用onTouch
代替onClick
,因此EditText
是否具有焦点并不重要。
edt.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
CommentDialog.buildDialog(mContext, identifier, false, edt.getId());
return false;
}
});
答案 2 :(得分:6)
你无需做什么
edt.setFocusable(false);
答案 3 :(得分:5)
在
上显示警告对话框框setOnFocusChangeListener()
答案 4 :(得分:5)
如果focusableInTouchMode为true,则仅在第二次触摸时触发触摸,因此除非您希望该情况,否则对focusableInTouchMode使用false。如果要在视图集中启用可聚焦性,请设置为focusable true
<EditText android:focusable="true" android:focusableInTouchMode="false" ... />
答案 5 :(得分:3)
避免使用FocusChangeListener
,因为当您不需要它时它会表现不正常(例如,当您进入活动时)。只需设置一个OnTouchListener
和OnClickListener
,就像这样:
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
view.requestFocus();
break;
}
return false;
}
这将使您的EditText
在onClick调用之前获得焦点。
答案 6 :(得分:1)
如果您不需要键盘,请使用“Editable = false”和“Focus = false”,而不是设置输入类型。
这对你有帮助。
答案 7 :(得分:1)
你应该添加onFocusChangeListener:
edt.setKeyListener(null);
edt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
{
edt.callOnClick();
}
}
});
edt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommentDialog.buildDialog(mContext, identifier, false, edt.getId());
}
});
答案 8 :(得分:-1)
在尝试重现&#34;点击时,这对我来说是一个真正的问题。当弹出软键盘时,来自EditText的声音;我只是每隔一次点击一次。对我来说固定的是与@neaGaze相反的东西。这在my_layout.xml中适用于我:
<EditText android:focusable="true" android:focusableInTouchMode="true" ... />
它允许每次用户输入EditText时发生单击声音/事件,同时还允许显示软键盘。你必须处理OnClickListener当然会发生这种情况,即使你什么都不做,就像这样:
myEditText = (EditText) findViewById(R.id.myEditText);
...
// implement the onClick listener so we get the click sound and event if needed
myEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//do something or nothing; up to you
}
});
说到那个讨厌的软键盘,如果我用软键盘完成了我的Dialog风格活动,无论我尝试什么,当我回到MainActivity时键盘都保持不动。我曾尝试过所有常见的建议,例如Close/Hide the Android soft keyboard,How to close Android soft keyboard programmatically等。这些都没有效果。
在我的情况下,我不需要MainActivity中的软键盘。在我的AndroidManifest.xml文件中,MainActivity部分
中的工作原理如下<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>