2012-12-19 78 views
1

我試圖讓有被設置爲的inputType =「號」,所以它看起來像一個小鍵盤,而不是整個鍵盤的幾個領域的EditText平板電腦的應用程序。這顯然是因爲我只想輸入數字。MonoDroid的EditText上輸入型號檢測輸入按鍵

不過,我想檢測,如果用戶按下ENTER鍵。如果他們這樣做,我想關閉軟鍵盤 - 所以很容易,比打那個小向下箭頭按鈕隱藏鍵盤更方便。我已經爲接受所有字符(使用默認鍵盤)的屏幕上的另一個編輯文本框做了這個確切的事情,並且工作正常。但由於某些原因,當我嘗試檢測數字鍵盤的按鍵時,我無法這樣做。

所以這裏就是我似乎無法找出問題:當我添加一個監聽器的鍵盤,沒有什麼工作。屏幕上沒有數字出現。如果我刪除了監聽器,數字鍵盤再次正常工作,但是我不能聽按下Enter鍵,所以我可以關閉軟鍵盤。

所以,這裏是我的了:

  <EditText 
      android:id="@+id/NumOfAdults_EditText" 
      android:layout_width="70sp" 
      android:layout_height="50sp" 
      android:inputType="number" 
      android:textSize="20sp" 
      android:textStyle="bold" 
      android:gravity="center" 
      android:selectAllOnFocus="true" 
      /> 

我聽這樣的:

  var editTextBox = FindViewById<EditText>(Resource.Id.NumOfAdults_EditText); 
      editTextBox.KeyPress += (intentSender, e) => 
      { 
      if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) 
      { 
       CloseSoftKeyboard(); 
       e.Handled = true; 
      } 
      }; 

所以沒有任何人有任何想法,爲什麼我這樣做的時候,數字輸入鍵停止加工?當inputType未設置爲號碼或電話時,此代碼完全正常工作。有什麼好笑的是,如果我添加了檢測內部Make.Toast,我可以清楚地看到了按鍵的工作(甚至可以得到Num0-9顯示),但再沒有什麼似乎在屏幕上工作。

回答

0

您可以覆蓋您的活動的DispatchKeyEvent方法,並放入類似這樣的代碼。儘管它會被調用所有的按鈕,所以儘量使它儘可能地受到限制。

在此示例中,將etTheIdOfYourEditTextControl替換爲您希望發生此行爲的字段的實際名稱。

public override bool DispatchKeyEvent(KeyEvent e) 
    { 
     if (this.CurrentFocus.Id == Resource.Id.etTheIdOfYourEditTextControl && (e.KeyCode == Keycode.NumpadEnter || e.KeyCode == Keycode.Enter)) 
     { 
      InputMethodManager imm = GetSystemService(Context.InputMethodService) as InputMethodManager; 
      if (imm != null) 
       imm.HideSoftInputFromWindow(this.CurrentFocus.WindowToken, 0); 

      return true; 
     } 

     return base.DispatchKeyEvent(e); 
    }