2012-03-03 30 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); 
相關問題