Android编辑文本字段类按钮
我正在努力处理一件(似乎)小事。在我的应用程序中,我有一个带有两个Android编辑文本字段类按钮,android,android-edittext,Android,Android Edittext,我正在努力处理一件(似乎)小事。在我的应用程序中,我有一个带有两个EditText字段的活动 我希望其中一个是normal字段(etNormal),而另一个(etButton)的行为更像按钮,因此当你触摸它时,不会显示键盘,而是打开滑动抽屉。如果滑动抽屉打开并按下Normal edittext,滑动抽屉将隐藏 我已经尝试将OnClickListener和ontouchtlistener(不在相同的尝试中)添加到这两个选项中,条件是如果单击/触摸了etButton打开滑动抽屉,如果没有,则关闭 结
EditText
字段的活动
我希望其中一个是normal字段(etNormal),而另一个(etButton)的行为更像按钮,因此当你触摸它时,不会显示键盘,而是打开滑动抽屉。如果滑动抽屉打开并按下Normal edittext,滑动抽屉将隐藏
我已经尝试将OnClickListener
和ontouchtlistener
(不在相同的尝试中)添加到这两个选项中,条件是如果单击/触摸了etButton打开滑动抽屉,如果没有,则关闭
结果很奇怪。当它是OnTouchListener测试时,它更像是切换开关,所以当我按下一个抽屉打开,另一个抽屉关闭。说到OnClickListener,我需要按两次每个edtitext来完成操作
为了在etButton中隐藏keybord,我使用了setInputType(InputType.TYPE\u NULL)代码>。我还尝试了setEnabled(false)代码>但我甚至无法点击/触摸它。当前使用的方法的一个缺陷是,当我将click从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)
有什么问题吗?如果您使用的是onTouch事件,当您单击编辑文本时,您将得到两个事件,其中action为MotionEvent.action\u 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;
}
};
如果您使用的是onTouch事件,当您单击编辑文本时,您将获得两个事件,其中action为MotionEvent.action\u 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;
}
};
如果etButton需要是一个EditText(为什么不是一个按钮,如果它应该像一个按钮的话?),也许您可以设置一个onFocusChangeListener。一旦它得到了焦点,你可以展示抽屉
不确定是否不显示键盘…如果etButton需要是EditText(为什么不是按钮,如果它的行为应该像一个按钮呢?),也许您可以设置一个onFocusChangeListener。一旦它得到了焦点,你可以展示抽屉
不确定是否不显示键盘…编辑文本很棘手。使用OnClickListener时必须按两次的原因是EditText周围的第一次获得焦点,这会消耗触摸事件,在这种情况下,OnFocusListener会被触发。第二次触摸时,EditText已具有焦点,因此现在会触发单击事件
我建议你在没有编辑文本的情况下尝试这样做。无论如何,这将产生一个更干净、更简单的解决方案。为什么要使用EditText而不是按钮?EditText很棘手。使用OnClickListener时必须按两次的原因是EditText周围的第一次获得焦点,这会消耗触摸事件,在这种情况下,OnFocusListener会被触发。第二次触摸时,EditText已具有焦点,因此现在会触发单击事件
我建议你在没有编辑文本的情况下尝试这样做。无论如何,这将产生一个更干净、更简单的解决方案。为什么要使用EditText而不是按钮?在布局中,向EditText添加以下属性
android:focusable="false"
android:focusableInTouchMode="false"
接下来,编写方法来处理单击EditText并添加应用程序逻辑。在布局中,将以下属性添加到EditText
android:focusable="false"
android:focusableInTouchMode="false"
接下来,编写方法来处理单击EditText并添加您的应用程序逻辑。得到了一个类似的EditText
android:focusable="false"
android:clickable="true"
然后,一个覆盖操作的OnClickListener得到了一个editText,它与
android:focusable="false"
android:clickable="true"
然后一个OnClickListener来覆盖操作除了上面的答案之外,我还使用cursorVisibility隐藏光标
android:focusable="false"
android:clickable="true"
android:cursorVisible="false"
android:focusableInTouchMode="false"
光标可见单击编辑文本时显示/隐藏光标
android:focusable="false"
android:focusableInTouchMode="false"
可聚焦在用户触摸视图时获得焦点,如EditText
android:focusable="false"
android:focusableInTouchMode="false"
focusableInTouchMode以保持视图处于选中状态。(选择和单击是不同的)
如需详细了解,请参阅除上述答案外,我还使用cursorVisibility隐藏光标
android:focusable="false"
android:clickable="true"
android:cursorVisible="false"
android:focusableInTouchMode="false"
光标可见单击编辑文本时显示/隐藏光标
android:focusable="false"
android:focusableInTouchMode="false"
可聚焦在用户触摸视图时获得焦点,如EditText
android:focusable="false"
android:focusableInTouchMode="false"
focusableInTouchMode以保持视图处于选中状态。(选择和单击是不同的)
有关详细了解,请参阅不起作用的。当版面膨胀时,其中一个EditText将自动获得焦点,而无需用户交互。mh ok(一个不常见的解决方法是添加一个在开始时具有焦点的不可见视图,但我相信有更好的解决方案)。是的,但在我看来,更好的解决方法是手动将焦点分配给包含编辑文本的布局。这样,您就可以完全控制哪个视图实际具有焦点,并且不需要添加额外的视图。除此之外,没有更好的解决办法。至少据我所知。这只是编辑文本的一种有时会出现问题的行为。这是行不通的。当