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(一个不常见的解决方法是添加一个在开始时具有焦点的不可见视图,但我相信有更好的解决方案)。是的,但在我看来,更好的解决方法是手动将焦点分配给包含编辑文本的布局。这样,您就可以完全控制哪个视图实际具有焦点,并且不需要添加额外的视图。除此之外,没有更好的解决办法。至少据我所知。这只是编辑文本的一种有时会出现问题的行为。这是行不通的。当