SearchView:詳解Android搜索框

一、簡介

SearchView是Android系統中常用的搜索框控制項,其功能強大,能夠方便地實現搜索功能。使用SearchView,我們可以讓用戶快速、方便地查找需要的數據,提高用戶體驗。

二、常用屬性

1. android:iconifiedByDefault

設置SearchView是否處於圖標化狀態。當值為true時,SearchView處於圖標化狀態,只顯示搜索圖標;當值為false時,SearchView不處於圖標化狀態,顯示放大鏡圖標和搜索框。


<SearchView
    android:id="@+id/searchview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
/>

2. android:queryHint

設置搜索框中的提示文字。當SearchView中沒有內容時,顯示提示文字幫助用戶輸入內容。


<SearchView
    android:id="@+id/searchview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
    android:queryHint="搜索"
/>

3. app:searchIcon

設置搜索圖標。可以使用@drawable或@Mipmap引用一張圖片作為搜索圖標。也可以使用系統自帶搜索圖標。


<SearchView
    android:id="@+id/searchview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
    android:queryHint="搜索"
    app:searchIcon="@mipmap/search"
/>

4. app:closeIcon

設置關閉圖標。當SearchView中有內容時,顯示關閉圖標幫助用戶清空輸入內容。


<SearchView
    android:id="@+id/searchview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
    android:queryHint="搜索"
    app:searchIcon="@mipmap/search"
    app:closeIcon="@mipmap/close"
/>

5. app:voiceIcon

設置語音圖標。當用戶點擊語音圖標時,可以使用語音輸入進行搜索。


<SearchView
    android:id="@+id/searchview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
    android:queryHint="搜索"
    app:searchIcon="@mipmap/search"
    app:closeIcon="@mipmap/close"
    app:voiceIcon="@mipmap/voice"
/>

三、監聽事件

1. OnQueryTextListener

當用戶輸入搜索內容並按下搜索鍵時觸發該事件。


searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    // 當用戶按下搜索鍵時觸發該事件
    @Override
    public boolean onQueryTextSubmit(String query) {
        // 搜索
        return false;
    }

    // 當用戶輸入搜索內容時觸發該事件
    @Override
    public boolean onQueryTextChange(String newText) {
        // 處理輸入內容
        return false;
    }
});

2. OnCloseListener

當用戶點擊關閉圖標時觸發該事件。


searchView.setOnCloseListener(new SearchView.OnCloseListener() {
    @Override
    public boolean onClose() {
        // 處理關閉事件
        return false;
    }
});

四、使用示例

在下面的示例中,我們使用SearchView實現一個簡單的搜索功能,當用戶輸入搜索關鍵字並按下搜索鍵時,將搜索結果顯示在RecyclerView中。


public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private SearchView searchView;
    private List dataList = new ArrayList();
    private List searchList = new ArrayList();
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerview);
        searchView = findViewById(R.id.searchview);

        initData();

        adapter = new MyAdapter(dataList);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

        // 監聽搜索框
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // 處理搜索結果
                searchList.clear();
                for (String data : dataList) {
                    if (data.contains(query)) {
                        searchList.add(data);
                    }
                }
                // 更新RecyclerView
                adapter.setData(searchList);
                adapter.notifyDataSetChanged();
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
    }

    private void initData() {
        dataList.add("蘋果");
        dataList.add("香蕉");
        dataList.add("橘子");
        dataList.add("柚子");
        dataList.add("葡萄");
        dataList.add("西瓜");
        dataList.add("菠蘿");
        dataList.add("草莓");
        dataList.add("櫻桃");
        dataList.add("李子");
        dataList.add("柿子");
        dataList.add("哈密瓜");
        dataList.add("橙子");
        dataList.add("芒果");
        dataList.add("獼猴桃");
    }

    class MyAdapter extends RecyclerView.Adapter {

        private List data;

        MyAdapter(List data) {
            this.data = data;
        }

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.tv.setText(data.get(position));
        }

        @Override
        public int getItemCount() {
            return data.size();
        }

        void setData(List data) {
            this.data = data;
        }
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tv;

        MyViewHolder(View itemView) {
            super(itemView);
            tv = itemView.findViewById(android.R.id.text1);
        }
    }
}

原創文章,作者:DIKGM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/366216.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DIKGM的頭像DIKGM
上一篇 2025-04-02 01:02
下一篇 2025-04-02 01:02

相關推薦

  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控制項。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27
  • Android Java Utils 可以如何提高你的開發效率

    Android Java Utils 是一款提供了一系列方便實用的工具類的 Java 庫,可以幫助開發者更加高效地進行 Android 開發,提高開發效率。本文將從以下幾個方面對 …

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論