1. 程式人生 > >搜尋框(SearchView)用法

搜尋框(SearchView)用法

SearchView是Android原生的搜尋框控制元件,它提供了一個使用者介面,可以讓使用者在文字框內輸入文字,並允許通過看監聽器監控使用者輸入,當用戶輸入完成後提交搜尋時,也可通過監聽器執行實際的搜尋。

SearchView屬性如下:

XML屬性

相關方法

說明

Android:IconifiedByDefault(Boolean iconified)

setIconifiedByDefault(boolean)

設定該搜尋框預設是否自動縮小為圖示

android:imeOptions

setImeOptions(int)

設定輸入法搜尋選項欄位,預設是搜尋,可以是:下一頁、傳送、完成等

android:inputType

setInputType(int)

設定輸入型別

android:maxWidth

setMaxWidth(int)

設定最大寬度

android:queryHint

setQueryHint(CharSequence)

設定查詢提示字串

使用SearchView時可使用如下常用方法。

setIconifiedByDefault(Boolean iconified):設定該搜尋框預設是否自動縮小為圖示。

setSubmitButtonEnabled(Boolean enabled):設定是否顯示搜尋按鈕。

setQueryHint(CharSequence hint):設定搜尋框內預設顯示的提示文字。

setOnQueryTextListener(SearchView.OnQueryTextListener listener):為該搜尋框設定事件監聽器。

如果為SearchView增加一個配套的ListView,則可以為SearchView增加自動完成功能。下面例項示範如何使用SearchView。

佈局檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!--定義一個SearchView-->
    <SearchView
        android:id="@+id/searchview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <!--為SearchView定義自動完成的ListView-->
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
</LinearLayout>

主程式如下:

public class MainActivity extends AppCompatActivity {

    private String[] mStrings = new String[]{"說好不哭", "等你下課", "不愛我就拉到", "123456"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView listView = findViewById(R.id.listview);
        listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, mStrings));
        //設定ListView啟用過濾
        listView.setTextFilterEnabled(true);
        SearchView searchView = findViewById(R.id.searchview);
        //設定該SearchView預設是否自動縮小為圖示
        searchView.setIconifiedByDefault(false);
        //設定該SearchView顯示搜尋按鈕
        searchView.setSubmitButtonEnabled(true);
        searchView.setQueryHint("查詢");
        //為該SearchView元件設定事件監聽器
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            //單機搜尋按鈕時激發該方法
            @Override
            public boolean onQueryTextSubmit(String query) {
                //實際應用中應該在該方法內執行實際查詢,此處僅使用Toast顯示使用者輸入的查詢內容
                Toast.makeText(MainActivity.this, "你的選擇是:" + query,
                        Toast.LENGTH_SHORT).show();
                return false;
            }

            //使用者輸入字元時激發該方法
            @Override
            public boolean onQueryTextChange(String newText) {
                //如果newText不是長度為0的字串
                if (TextUtils.isEmpty(newText)) {
                    //清除ListView的過濾
                    listView.clearTextFilter();
                } else {
                    //使用使用者輸入的內容對ListView的列表項進行過濾
                    listView.setFilterText(newText);
                }
                return true;
            }
        });
    }
}

本例中定義了一個ListView元件用於為SearchView元件顯示自動完成列表。

執行結果如下:

&n