2013-11-04 82 views
1

我想应付一个(似乎是)smalll的事情。在我的应用程序中,我有两个EditText字段的活动。Android EditText字段像按钮

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

我已经尝试了加入OnClickListenerOnTouchListener(不是在相同的尝试中)两个条件如果etButton被点击/触摸打开滑动抽屉,如果没有然后关闭。

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

要隐藏etButton中的keybord,我正在使用setInputType(InputType.TYPE_NULL);。我也尝试setEnabled(false);,但我甚至无法点击/触摸它。目前使用的方法的一个缺陷是当我改变从etNormal到etButton的点击时,键盘仍然显示并且不隐藏。

那么,谁能告诉我我能做些什么来实现我的目标?

编辑:

我ERAD当前的建议和修改一点点我的代码,但它仍然是行不通的。

这是它的一部分我在哪里分配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不接触任何东西hapens(只有在打开时滑动抽屉才会隐藏),并且当触摸etNormal1或2时,滑动抽屉出现或隐藏取决于第一个(换句话说,就是toggel)。

任何想法,这里有什么错?

回答

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; 
     } 
    }; 
+0

感谢您的第一建议,但它仍然是行不通的。我已经按照你的要求添加了代码。 – sebap123

+0

尝试修改 –

0

如果etButton需要有一个EditText(为什么不是一个按钮,如果它应该表现得像一个?),也许你可以设置一个onFocusChangeListener。一旦得到重点,你可以显示抽屉......?

不确定关于不显示键盘...

+0

这不起作用。当布局膨胀时,其中一个EditText将自动获得焦点而无需用户交互。 –

+0

嗯好了(一个hacky的解决方法是添加一个隐藏的视图,其中有一个焦点在开始,但我相信有一个更好的解决方案)。 – jpm

+0

是的,但我认为更好的解决方法是手动将焦点分配给包含EditTexts的布局。通过这种方式,您可以完全控制哪个View实际上具有焦点,而且您不需要添加额外的View。除此之外,没有更好的解决方法。至少我知道。这只是EditTexts有时候有问题的行为。 –

0

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

我建议你尽量不用EditTexts来做到这一点。无论如何,这将产生更清洁和更简单的解决方案。为什么你要使用EditTexts而不是按钮?

2

在你的布局,下面的属性添加到的EditText

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

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

5

有一个EDITTEXT那样工作与

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

然后一个OnClickListener覆盖行动