我正在努力应对一个(似乎是)小事。在我的应用程序中,我有一个活动有两个EditText
字段。
我希望其中一个是normall field(etNormal),而另一个(etButton)的行为更像按钮,所以当你触摸它时,键盘没有显示,而是滑动抽屉被打开。如果打开滑动抽屉,您将按下normall edittext滑动抽屉将隐藏。
我已经尝试将OnClickListener
和OnTouchListener
(不是在相同的尝试中)添加到条件中,如果点击/触摸打开滑动抽屉的etButton,如果没有则关闭。
结果很奇怪。当它是OnTouchListener测试时更像是切换,所以当我按下一个抽屉打开而另一个关闭时。当谈到OnClickListener时,我需要按两次edtitext来完成操作。
为了隐藏etButton中的keybord,我正在使用setInputType(InputType.TYPE_NULL);
。我也试过setEnabled(false);
,但后来我甚至无法点击/触摸它。当前使用的方法的一个缺点是当我将点击从etNormal更改为etButton时,键盘仍然显示并且它不会隐藏。
那么,任何人都可以告诉我我能做些什么来实现我的目标吗?
修改
我已经删除了您当前的建议,并修改了一些我的代码,但它仍无效。
这是我分配OnTouchListener的一部分:
OnTouchListener touchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent ev) {
if(v==etButton && ev.getAction()==MotionEvent.ACTION_DOWN) {
slidingDrawer.animateOpen();
}else {
slidingDrawer.animateClose();
}
return false;
}
};
etNormal1.setOnTouchListener(touchListener);
etNormal2.setOnTouchListener(touchListener);
etButton.setOnTouchListener(touchListener);
另外在XML布局文件中的etButton声明中我有:
android:focusable="false"
但是现在,在etButton触摸时没有任何东西(只有滑动抽屉隐藏,如果被打开),并且当触摸etNormal1或2时,滑动抽屉显示或隐藏取决于第一个(换句话说toggel)。
任何想法,这里有什么问题?
答案 0 :(得分:5)
使用
编辑了一个editTextandroid:focusable="false"
android:clickable="true"
然后使用OnClickListener覆盖操作
答案 1 :(得分:2)
在布局中,将以下属性添加到EditText
android:focusable="false"
android:focusableInTouchMode="false"
接下来,编写方法来处理EditText上的点击并添加你的应用程序逻辑。
答案 2 :(得分:2)
除上述答案外,我还使用cursorVisibility隐藏光标!
android:focusable="false"
android:clickable="true"
android:cursorVisible="false"
android:focusableInTouchMode="false"
cursorVisible 在单击EditText
时显示/隐藏光标可聚焦在用户触摸视图时获得焦点,例如EditText
focusableInTouchMode 保持选中的视图。 (选择并点击不同)
有关详细信息,请参阅here
答案 3 :(得分:1)
如果您正在使用onTouch事件,当您单击edittext时,您将获得两个带有动作的事件,如MotionEvent.Action_down和action Up。所以基本上它会产生两次点击编辑文本的效果。能否请您提供代码,以便我们深入了解。
将您的代码重写为:
OnTouchListener touchListener = new OnTouchListener() {
boolean isOpen=false;
@Override
public boolean onTouch(View v, MotionEvent ev) {
if(v==etButton && ev.getAction()==MotionEvent.ACTION_UP) {
if(!isOpen){
slidingDrawer.animateOpen();
}else{
slidingDrawer.animateClose();
}
isOpen=!isOpen;
}
return false;
}
};
答案 4 :(得分:0)
如果etButton需要是一个EditText(为什么不是一个按钮,如果它应该像一个?),也许你可以设置一个onFocusChangeListener。一旦获得焦点,您就可以显示抽屉......?
不确定没有显示键盘......
答案 5 :(得分:0)
EditTexts很棘手。使用OnClickListener时必须按两次的原因是第一次围绕EditText获得焦点并且这会消耗触摸事件,在这种情况下会触发OnFocusListener。第二次触摸时,EditText已经有了Focus,所以现在触发了一个click事件。
我建议你在没有EditTexts的情况下尝试这样做。无论如何,这将产生更清洁和更简单的解决方案。为什么要使用EditTexts而不是Buttons?