2012-03-29 11 views
0

アクションバーにカスタムのActionViewを追加しました。これは、ユーザーが数字を入力して何かを見えるようにするためのものです。しかし、私がレイアウトのために使用したEditTextは、数字のimeTypeを指定しても、常に完全な英数字のキーボードを表示します。私は英数字のキーボードを望んでいません。ヘック、私は+/-タイプのオプションが欲しくない。ちょうど0-9と "完了"検索用のEditTextにカスタムキーパッドを使用させるにはどうすればよいですか?ドロップダウンキーボードを行う方法はありますか?私はそのフィールドのためにカスタムIMEを書くことを望んでいましたが、それは許可されていないようです。Android:アクションバーの折り畳み式アクションビューのカスタムキーパッド?

メニューのためのXML:アクションレイアウトの

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_keypad" 
     android:icon="@drawable/ms_btn_keypad_sel" 
     android:title="Keypad" 
     android:showAsAction="ifRoom|collapseActionView" 
     android:actionLayout="@layout/keypad_actionview"/> 
</menu> 

XML:

<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/keypad_actionview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="@color/White" 
     android:drawableLeft="@drawable/icon_channel_keypad" 
     android:drawablePadding="5dp" 
     android:inputType="number" 
     android:imeOptions="flagNoExtractUi" 
     /> 

Javaのアクションバーのメニューを設定する:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.number_menu, menu); 
    keypadMenuItem = menu.findItem(R.id.menu_keypad); 
    final EditText keypadText = (EditText) keypadMenuItem.getActionView(); 
    keypadText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(final TextView textView, final int i, final KeyEvent keyEvent) { 
      keypadMenuItem.collapseActionView(); 
      changeDisplayedNumber(Integer.valueOf(textView.getText().toString()), true); 
      textView.setText(""); 
      return true; 
     } 
    }); 
    keypadMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      startAutoHidePlayerControlsRunner(); 
      return true; // Return true to collapse action view 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      stopAutoHidePlayerControlsRunner(); 
      keypadText.setText(""); 
      keypadText.requestFocus(); 
      /*keypadText.setInputType(InputType.TYPE_CLASS_NUMBER); 
      InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
      if (inputMethodManager != null) { 
       inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); 
      }*/ 
      return true; // Return true to expand action view 
     } 
    }); 

    return true; 
} 

最後にコメントアウトコードJavaのすぐに表示するように強制しようとしていたが、それはいくつかの奇妙な動作を引き起こしていた - 非 - 数値キーボードがポップアップします。

+0

あなたの 'ExitText'(レイアウトファイルとそれをアクションバーにどのように追加するか)。 – CommonsWare

+0

私はメニューXML、私のレイアウトはactionView、JavaはonCreateOptionsを追加しました。 – Calvin

+0

私はアクションバーの 'EditText'を持っていて、' inputType = "number" '(注:私は折りたたむことができません)を使うサンプルを修正しました。 XOOMでは、正常に動作しました。トランスフォーマープライムでは、QWERTYキーボードを手に入れました。 4.0.3エミュレータでは、正しく動作しました。それで...あなたは何を試していますか? – CommonsWare

答えて

1

私はそれはそれはAsusのキーボード

とデフォルトの入力の問題だということだ実現はい、トランス首相は多少この問題に壊れているようです。つまり、IMFは必ずinputTypeを守ることはできません。たとえば、グラフィティIMEはすべてペンベースなので、「数字」と「テキスト」の実際の概念はおそらくありません。 inputTypeはリクエストであり、契約ではありません。

私は強制的に異なる入力方法でそれが可能であればいくつかの厄介なマルウェア可能性を秘めている

番号を入れ替えることができます。

actionViewを作るための巧妙な方法がありますがEditTextが取得する際の制御を取得することが歓迎されている下

で/ドロップダウンにアクションバーでのEditTextとカスタムキーボードを持っていますフォーカス(setOnFocusChangeListener())を実行して、今まで行っていた活動中のカスタムキーボードを表示したり、数値キーパッドをハックしたListPopupWindowを表示したりするなど、何かをするか...

+0

私は、ListPopupWindowは必ずしもリストを含む必要はないと仮定しますか?私は、リストという言葉のためにそれを使用するとは考えていませんでした。申し訳ありません - 入力いただきありがとうございます! – Calvin

+0

@カルヴァン:いいえ、それは 'ListView'を持っていなければなりません。しかし、あなたは 'ListView'の行にボタンを置くことができます。あなたはドロップダウンを望んでいました。それはドロップダウンです... – CommonsWare

関連する問題