1

我正在努力应对一件(似乎是)小事。在我的应用程序中,我有一个包含两个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 touch 上什么也没有发生(只有滑动抽屉在打开时才会隐藏),当触摸 etNormal1 或 2 时,滑动抽屉会根据第一个出现或隐藏(换句话说,toggel)。

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

4

6 回答 6

6

有一个像这样工作的editText

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

然后是一个 OnClickListener 来覆盖该操作

于 2013-11-04T10:27:01.813 回答
4

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

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

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

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

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

详细了解请参考这里

于 2018-05-15T21:25:57.000 回答
2

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

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

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

于 2013-11-04T10:19:40.893 回答
1

如果您使用onTouch 事件,当您单击edittext 时,您将获得两个动作为MotionEvent.Action_down 和动作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;
        }
    };
于 2013-11-04T10:16:04.720 回答
0

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

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

于 2013-11-04T10:18:16.043 回答
0

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

不确定不显示键盘...

于 2013-11-04T10:16:39.503 回答