Как установить тип ввода SearchView в числовой - PullRequest
11 голосов
/ 03 марта 2012

У меня в настоящее время есть SearchView в ActionBar моего приложения (которое я заполняю из файла макета XML), и я пытаюсь заставить его принимать только числовой ввод. Я попытался установить атрибут android:inputType="number" в XML, но он не имеет никакого эффекта.

Кто-нибудь знает источник этой проблемы?

Ресурс меню 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>

Ответы [ 4 ]

11 голосов
/ 17 декабря 2012

setInputType для searchView был введен в API 14. Чтобы установить его в число, попробуйте:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER);
7 голосов
/ 28 июня 2014

Если вы устанавливаете его во фрагменте библиотеки совместимости, вам нужно использовать 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);
        }
    }
}
2 голосов
/ 07 марта 2016

При использовании SearchView из android.support.v7.widget вы можете использовать:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER);
2 голосов
/ 03 марта 2012

Это не совсем ответ, но имейте в виду, что полезность фильтров типа ввода может зависеть от используемого вами IME;некоторые клавиатуры не подчиняются этим типам ввода ... Я усвоил это нелегко.: (

Имея это в виду, пытались ли вы использовать другие типы ввода, чтобы увидеть, будут ли они придерживаться? Если они все-таки придерживаются, это, вероятно, проблема IME. Если они этого не делают, это, вероятно, проблема сспособ, которым вы пытаетесь применить тип ввода.

Теперь, чтобы получить ответ:

Вы можете попробовать в onCreateOptionsMenu выполнить поиск по идентификатору этого меню.элемент, приведение к SearchView и установка типа ввода в коде:

@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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...