Android EditText字段,如按钮

时间:2013-11-04 10:10:50

标签: android android-edittext

我正在努力应对一个(似乎是)小事。在我的应用程序中,我有一个活动有两个EditText字段。

我希望其中一个是normall field(etNormal),而另一个(etButton)的行为更像按钮,所以当你触摸它时,键盘没有显示,而是滑动抽屉被打开。如果打开滑动抽屉,您将按下normall edittext滑动抽屉将隐藏。

我已经尝试将OnClickListenerOnTouchListener(不是在相同的尝试中)添加到条件中,如果点击/触摸打开滑动抽屉的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)。

任何想法,这里有什么问题?

6 个答案:

答案 0 :(得分:5)

使用

编辑了一个editText
android: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?