2013-11-04 129 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覆蓋行動