2012-03-03 35 views
9

Tôi hiện đang có SearchView trong ứng dụng ActionBar của ứng dụng (trong đó tôi đang nhập từ tệp bố cục XML) và tôi đang cố gắng ép buộc chỉ nhập số vào. Tôi đã thử đặt thuộc tính android:inputType="number" trong XML, nhưng nó không có hiệu lực.Cách đặt loại đầu vào của SearchView thành số

Có ai biết nguồn gốc của sự cố này không?

Tài nguyên đơn 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

Xem này [link] (http://developer.android.com/reference/android/widget/SearchView.html) –

+2

Cám ơn những lời khuyên, nhưng tôi biết tham khảo tài liệu Android trước khi đặt câu hỏi trên StackOverflow: P –

+0

Hơn nữa, tài liệu dường như gợi ý rằng không có bất kỳ vấn đề nào với phương pháp này. –

Trả lời

6

Nếu bạn đang cài đặt nó trong một đoạn thư viện tương thích, bạn cần phải sử dụng 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()' không được chấp nhận. Nó đã được thay đổi mà bạn có thể truy cập trực tiếp vào inputType. Kotlin 'searchView.setInputType = InputType.TYPE_CLASS_NUMBER' –

2

Đây không phải là chính xác một câu trả lời, nhưng hãy nhớ rằng tính hữu ích của loại đầu vào bộ lọc có thể tùy thuộc vào IME bạn đang sử dụng; một số bàn phím không dễ dàng tuân thủ các kiểu đầu vào này ... Tôi đã học được cách khó khăn đó. :(

Với ý nghĩ đó, bạn đã thử sử dụng các loại đầu vào khác để xem liệu chúng có dính vào không? Nếu chúng bị dính, đó có thể là vấn đề IME. trong đó bạn đang cố gắng để thực thi các loại đầu vào

Bây giờ, đối với một shot tại một câu trả lời:.

bạn có thể thử, trong onCreateOptionsMenu, làm một tra cứu bằng ID đó mục trình đơn, đúc đến một SearchView và đặt loại đầu vào trong mã:

@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

Xin chào Jon, cảm ơn sự giúp đỡ. Tôi đã thử một vài mục khác (tức là 'android: inputType = "phone" '), nhưng chúng không có hiệu lực. Hơn nữa, có vẻ như [setInputType] (http://developer.android.com/reference/android/widget/SearchView.html#setInputType (int)) đã được giới thiệu trong API 14, mà tôi chưa bắt đầu hỗ trợ. GRRR –

+0

Các giải pháp rõ ràng sẽ là chỉ cần thực hiện một tùy chỉnh 'EditText' nhưng có phải là một cách để làm điều này w/o tùy biến ... –

+0

Nó xảy ra với tôi rằng nếu mã java để hỗ trợ kiểu đầu vào trên SearchView không tồn tại cho đến API14, điều này có thể đúng với thuộc tính inputType XML trên đối tượng đó. Có thể xây dựng ứng dụng của bạn cho API14 với thuộc tính inputType trong SearchView và xem liệu nó có hiệu lực không? Điều đó có lẽ sẽ cho biết điều này có chính xác hay không. –

9

setInputType on a searc hView đã được giới thiệu trong API 14. Để thiết lập nó để số thử:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); 
+1

Tính năng này cũng hoạt động với android.support.v7.widget.SearchView của AppCompat-v7. – bk138

+0

searchView.setInputType (InputType.TYPE_CLASS_NUMBER); –

1

Khi sử dụng SearchView từ android.support.v7.widget bạn có thể sử dụng:

searchView.setInputType(InputType.TYPE_CLASS_NUMBER); 
Các vấn đề liên quan