繁体   English   中英

Android EditText字段像按钮

[英]Android EditText field like button

我正在尝试处理一件小事情。 在我的应用程序中,我有一个带有两个EditText字段的活动。

我希望其中一个是标准字段(etNormal),而另一个(etButton)的行为更像是按钮,因此当您触摸它时,不会显示键盘,而是打开了滑动抽屉。 如果滑动抽屉被打开,您将按普通的edittext滑动抽屉将隐藏。

我曾尝试将条件为如果单击/触摸了etButton打开滑动抽屉,则将OnClickListenerOnTouchListener (不在同一尝试中)添加到这两个条件中(如果没有,则关闭)。

结果很奇怪。 在进行OnTouchListener测试时,它更像是切换,因此当我按下一个抽屉时打开另一个抽屉。 谈到OnClickListener时,我需要按两次edtitext才能完成操作。

为了在etButton中隐藏键盘,我正在使用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)。

任何想法,这是怎么了?

得到了一个editText与

android:focusable="false"
android:clickable="true"

然后使用OnClickListener覆盖操作

在您的布局中,将以下属性添加到EditText

android:focusable="false"
android:focusableInTouchMode="false"

接下来,编写方法来处理对EditText的单击,并添加您的应用程序逻辑。

除了以上答案外,我还使用cursorVisibility隐藏了光标!

android:focusable="false"
android:clickable="true"
android:cursorVisible="false"
android:focusableInTouchMode="false"

cursorVisible在单击EditText时显示/隐藏光标

focusable在用户触摸视图时获得焦点,例如EditText

focusableInTouchMode保持选择视图。 (选择和点击是不同的)

如需详细了解,请参阅此处

如果您使用的是onTouch事件,则单击编辑文本时,将获得两个事件,其动作分别为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;
        }
    };

如果etButton需要是一个EditText(为什么不是按钮,如果它的行为像一个按钮?),则可以设置onFocusChangeListener。 一旦获得焦点,就可以显示抽屉...?

不确定是否不显示键盘...

EditTexts非常棘手。 使用OnClickListener时必须按两次的原因是,第一次在EditText上获得焦点,并且消耗了touch事件,在这种情况下会触发OnFocusListener。 当您第二次触摸时,EditText已经具有焦点,因此现在触发了单击事件。

我建议您尝试在没有EditTexts的情况下执行此操作。 无论如何,这将产生一个更清洁,更简单的解决方案。 您为什么要使用EditTexts而不是Buttons?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM