2012-03-29 6 views
0

Ich habe meiner Aktionsleiste ein benutzerdefiniertes ActionView hinzugefügt, mit dem Benutzer durch Eingabe einer Nummer nach etwas suchen können. Der EditText, den ich für das Layout verwendet habe, zeigt jedoch immer eine vollständige alphanumerische Tastatur an, obwohl ich imeType der Nummer angegeben habe. Ich möchte keine alphanumerische Tastatur. Verdammt, ich möchte nicht einmal die Optionen vom +/- Typ. Nur 0-9 und ein "Fertig". Wie kann ich meinen EditText für die Suche mit einer benutzerdefinierten Tastatur verwenden? Gibt es eine Möglichkeit, eine Dropdown-Tastatur zu erstellen? Ich hatte gehofft, einen benutzerdefinierten IME nur für dieses Feld zu schreiben, aber es scheint, dass das nicht erlaubt ist.Android: Benutzerdefiniertes Tastenfeld für eine zusammenklappbare Aktionsansicht in einer Aktionsleiste?

XML für Menü:

<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 Handlungs Layout:

<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 für die Aktionsleiste Menü einrichten:

@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; 
} 

Der Kommentar gesetzt Code am Ende Das Java sollte versuchen, die Tastatur sofort zur Anzeige zu bringen, aber das verursachte seltsames Verhalten - nicht -Numerische Tastaturen erscheinen.

+0

Veröffentlichen Sie den Code, den Sie verwenden Ihr 'ExitText' (Layout-Datei und wie Sie es zur Aktionsleiste hinzufügen). – CommonsWare

+0

Ich habe mein Menü XML, mein Layout für die actionView und das Java für meine onCreateOptions hinzugefügt. – Calvin

+0

Ich ändere eines meiner Samples, wo ich einen 'EditText' in der Aktionsleiste habe, um' inputType = "number" 'zu benutzen (Hinweis: meins ist nicht reduzierbar). Auf dem XOOM funktionierte es korrekt. Auf dem Transformer Prime bekam ich die QWERTY-Tastatur. Auf dem Emulator 4.0.3 funktionierte es korrekt. Also ... worauf testest du? – CommonsWare

Antwort

1

Ich weiß, es ist, dass es sich um ein Standard-Eingabe Problem mit der Asus Tastatur ist

Ja, scheint das Transformer Prime zu diesem Thema etwas zu brechen. Davon abgesehen, bedenken Sie, dass kein IME eine gegebene inputType erfüllen wird. Zum Beispiel ist der Graffiti IME nur stiftbasiert und hat daher wahrscheinlich keine echte Vorstellung von "Nummer" vs. "Text". inputType ist eine Anfrage, kein Vertrag.

kann ich tauschen gewaltsam in eine andere Eingabemethode

Nr dass einige unangenehme Malware Potenzial hat, wenn es möglich wäre.

ist es ein cleverer Weg, die actionView hat EditText in der Aktionsleiste und eine benutzerdefinierte Tastatur in einem Drop-Down/unten

Sie sind herzlich eingeladen zu bekommen Kontrolle zu machen, wenn die EditText die bekommen Fokus (setOnFocusChangeListener()) und dann etwas tun, wie sichtbar machen Ihre in-activity benutzerdefinierte Tastatur, die bisher gegangen war, oder zeigen Sie eine ListPopupWindow, die Sie in eine Zehnertastatur hacken, oder ...

+0

Ich nehme dann an, dass ListPopupWindow nicht unbedingt eine Liste enthalten muss? Ich hatte nicht daran gedacht, das zu benutzen, weil das Wort List. Alles klar - danke für die Eingabe! – Calvin

+0

@Calvin: Nein, es muss eine 'ListView' haben. Sie können jedoch Schaltflächen in eine Zeile "ListView" einfügen. Sie wollten ein Drop-Down-Menü, und das ist ein Drop-Down ... – CommonsWare

Verwandte Themen