一、簡介
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-hk/n/366216.html