2012-03-03 89 views
9

我目前在我的应用程序的ActionBar(其中我从XML布局文件填充)中有一个SearchView,我试图强制它仅使用数字输入。我试过在XML中设置android:inputType="number"属性,但它没有效果。如何将SearchView的输入类型设置为数字

有没有人知道这个问题的根源?

的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

看到这个[链接](http://developer.android.com/reference/android/widget/SearchView.html) – 2012-03-03 05:10:20

+2

感谢您的意见,但在知道StackOverflow的问题之前,我知道要查阅Android文档:P – 2012-03-03 05:15:26

+0

此外,文档似乎表明这种方法应该没有任何问题。 – 2012-03-03 05:16:28

回答

6

如果你在一个兼容库片段设置它,你需要使用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()'已弃用。它已被更改,您可以直接访问inputType。 Kotlin 'searchView.setInputType = InputType.TYPE_CLASS_NUMBER' – 2017-11-28 07:01:07

2

这不完全是一个答案,但请记住,输入型过滤器的用处可在您使用的IME队伍;一些键盘不会轻易遵守这些输入类型...我学会了这种艰难的方式。 :(

考虑到这一点,你是否尝试过使用其他输入类型来查看它们是否会粘住?如果它们坚持,它可能是一个IME问题,如果它们不这样,这可能是一个问题在你试图强制输入型

现在,射击在一个答案:

你可以尝试,在onCreateOptionsMenu,通过该菜单项的ID做了查询,铸造到搜索查看,并在代码中设置输入类型:

@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

嘿乔恩,感谢您的帮助。我尝试了其他几个(即'android:inputType =“phone”'),但那些没有效果。此外,它看起来像[setInputType](http://developer.android.com/reference/android/widget/SearchView.html#setInputType(int))在API 14中引入,我还没有开始支持。 GRRR – 2012-03-03 17:21:44

+0

显而易见的解决方案是只做一个自定义的“EditText”,但必须有一种方法来做这个没有定制... – 2012-03-03 17:26:08

+0

它发生在我身上,如果Java代码支持SearchView上的输入类型在API14之前不存在,该对象上的inputType XML属性可能也是如此。也许在SearchView中使用inputType属性为API14构建应用程序,并查看它是否有效?这可能表明这是否准确。 – 2012-03-15 21:39:54

9

setInputType on search hView在API 14推出其设置为数字尝试:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); 
+1

这也适用于AppCompat-v7 android.support.v7.widget.SearchView。 – bk138 2014-12-10 19:17:04

+0

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); – 2015-05-10 13:29:20

1

当使用SearchViewandroid.support.v7.widget你可以使用:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); 
相关问题