2012-03-03 25 views
9

Actualmente tengo un SearchView en la aplicación ActionBar (de la cual estoy rellenando un archivo de diseño XML) y estoy tratando de forzarlo para que solo tome una entrada numérica. Intenté configurar el atributo android:inputType="number" en XML, pero no tiene ningún efecto.Cómo establecer el tipo de entrada de un SearchView en

¿Alguien conoce el origen de este problema?

El recurso de menú XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/search" 
     android:title="@string/menu_search" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@drawable/ic_menu_search_holo_light" 
     android:inputType="number" />  
</menu> 
+0

ver este [link] (http://developer.android.com/reference/android/widget/SearchView.html) –

+2

Gracias por el consejo, pero sé que debo consultar la documentación de Android antes de hacer preguntas sobre StackOverflow: P –

+0

Además, la documentación parece indicar que no debería haber ningún problema con este método. –

Respuesta

6

Si está configurando en un fragmento de biblioteca de compatibilidad, es necesario utilizar SearchViewCompat.setInputType(View searchView, int inputType):

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.searchable, menu); 
    MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
    if (searchMenuItem != null) { 
     SearchView searchView = (SearchView) searchMenuItem.getActionView(); 
     if (searchView != null) { 
      SearchViewCompat.setInputType(searchView, InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS); 
     } 
    } 
} 
+1

'SearchViewCompat.setInputType()' está en desuso. Se ha cambiado que se puede acceder directamente a inputType. Kotlin 'searchView.setInputType = InputType.TYPE_CLASS_NUMBER' –

2

Esto no es exactamente una respuesta, pero tenga en cuenta que la utilidad de los filtros de tipo de entrada puede estar supeditada a la IME está utilizando; algunos teclados no obedecen fácilmente estos tipos de entrada ... Lo aprendí de la manera difícil. :(

Teniendo esto en cuenta, ¿ha intentado utilizar otros tipos de entrada para ver si se van a pegar? Si lo hacen, es probable que sea un problema IME. Si no lo hacen, es probable que sea un problema. en el que usted está tratando de hacer cumplir el tipo de entrada

Ahora, de un tiro en una respuesta:.

usted puede tratar, en onCreateOptionsMenu, haciendo una búsqueda por ID de ese elemento de menú, echando a un SearchView y establecer el tipo de entrada en el código:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.default_menu, menu); 

    if (MyApplication.SUPPORTS_HONEYCOMB) { // quick check for API level 
     // If we have the honeycomb API, set up the search view 
     MenuItem searchItem = menu.findItem(R.id.search); 

     SearchView search = (SearchView) searchItem.getActionView(); 

     // your code here. something like: 
     search.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL); 

     // you also likely want to set up your search listener here. 

    } 

    // I'm using ActionBarCompat, in which case 
    // calling super after populating the menu is necessary here to ensure that the 
    // action bar helpers have a chance to handle this event. 
    return super.onCreateOptionsMenu(menu); 
} 
+0

Hola Jon, gracias por la ayuda. He intentado un par de otros (es decir, 'android: inputType =" phone "'), pero esos no tuvieron ningún efecto. Además, parece que [setInputType] (http://developer.android.com/reference/android/widget/SearchView.html#setInputType (int)) se introdujo en la API 14, que aún no he comenzado a admitir. GRRR –

+0

La solución obvia sería simplemente hacer un 'EditText' personalizado, pero tiene que haber una manera de hacerlo sin personalización ... –

+0

Se me ocurre que si el código java admite el tipo de entrada en SearchView no existe hasta API14 que lo mismo sea probablemente cierto para el atributo XML inputType en ese objeto. ¿Tal vez compile su aplicación para API14 con el atributo inputType en SearchView y vea si entra en vigencia? Eso probablemente indicaría si esto es exacto o no. –

9

setInputType en una búsqueda hview fue introducida en la API 14. Para ajustarlo al número intento:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); 
+1

Esto también funciona con AppCompat-v7 android.support.v7.widget.SearchView. – bk138

+0

searchView.setInputType (InputType.TYPE_CLASS_NUMBER); –

1

Al utilizar SearchView de android.support.v7.widget puede utilizar:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); 
Cuestiones relacionadas