Android?SearchView搜索控件使用方法詳解
本文實(shí)例為大家分享了Android SearchView搜索控件的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下
方法介紹
- setQueryHint
設(shè)置 Hint 的文字內(nèi)容
- setMaxWidth
設(shè)置搜索框的最大寬度
- setSubmitButtonEnabled
是否顯示提交按鈕,默認(rèn)是false
- setIconified
搜索框是否展開,false表示展開
- setIconifiedByDefault
是否鎖定搜索框?yàn)檎归_狀態(tài),false表示鎖定(放大鏡在搜索框外)
- onActionViewExpanded
鎖定搜索框?yàn)檎归_狀態(tài)
- onActionViewCollapsed
將當(dāng)前狀態(tài)切換為收縮狀態(tài)
- setImeOptions
改變軟鍵盤的右下角的回車鍵值
EditorInfo.IME_ACTION_SEARCH
表示右下角為搜索
使用方法
<?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"> ? ?<ListView ? ? ? android:layout_height="match_parent" ? ? ? android:layout_width="match_parent" ? ? ? android:id="@+id/mainListView1"/> </LinearLayout>
java代碼
public class MainActivity extends AppCompatActivity ?{ ? ?private ListView mListView; ? ?private ArrayAdapter mArrayAdapter; ? ?private String[]data={"a同學(xué)","b同學(xué)","c同學(xué)","d同學(xué)","A宿舍","B學(xué)校","C食堂","D教室","AA制"}; ? ?private SearchView mSearchView; ? ?@Override ? ?protected void onCreate(Bundle savedInstanceState) { ? ? ? super.onCreate(savedInstanceState); ? ? ? setContentView(R.layout.activity_main); ? ? ?? ? ? ? mArrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,data); ? ? ? mListView=findViewById(R.id.mainListView1); ? ? ? mListView.setAdapter(mArrayAdapter); ? ?} ? ?@Override ? ?public boolean onCreateOptionsMenu(Menu menu) ? ?{ ? ? ? getMenuInflater().inflate(R.menu.menu,menu); ? ? ? MenuItem MenuItem=menu.findItem(R.id.action_search); ? ? ? mSearchView=(SearchView) MenuItemCompat.getActionView(MenuItem); ? ? ?? ? ? ? mSearchView.setQueryHint("請(qǐng)輸入關(guān)鍵詞"); ? ? ? mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){ ? ? ? ? ? ? @Override ? ? ? ? ? ? public boolean onQueryTextSubmit(String p1) ? ? ? ? ? ? { ? ? ? ? ? ? ? ?//點(diǎn)擊搜索按鈕事件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//收起鍵盤 ? ? ? ? ? ? ? ?mSearchView.clearFocus(); ? ? ? ? ? ? ? ?//收起搜索框 ? ? ? ? ? ? ? ?mSearchView.onActionViewCollapsed(); ? ? ? ? ? ? ? ?return false; ? ? ? ? ? ? } ? ? ? ? ? ? @Override ? ? ? ? ? ? public boolean onQueryTextChange(String p1) ? ? ? ? ? ? { ? ? ? ? ? ? ? ?//當(dāng)搜索框的文字內(nèi)容發(fā)生變化時(shí)調(diào)用 ? ? ? ? ? ? ? ?mArrayAdapter.getFilter().filter(p1); ? ? ? ? ? ? ? ?return false; ? ? ? ? ? ? } ? ? ? ? ?}); ? ? ?? ? ? ? return super.onCreateOptionsMenu(menu); ? ?} }
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" ? ?xmlns:app="http://schemas.android.com/apk/res-auto"> ? ?<item ? ? ? android:id="@+id/action_search" ? ? ? app:actionViewClass="android.support.v7.widget.SearchView" ? ? ? app:showAsAction="ifRoom" /> ? ?<item ? ? ? android:id="@+id/action_settings" ? ? ? app:showAsAction="never"/> ? ? </menu>
效果圖
總結(jié)了幾個(gè)比較常見(jiàn)的問(wèn)題,并在網(wǎng)上找到了相應(yīng)的解決方案,親測(cè)有效
問(wèn)題1:如何去掉下劃線或自定義背景
try { ? ? //--拿到字節(jié)碼 ? ? ? ? ? ? Class<?> argClass = mSearchView.getClass(); ? ? ? //--指定某個(gè)私有屬性,mSearchPlate是搜索框父布局的名字 ? ? ? ? ? ? ? Field ownField = argClass.getDeclaredField("mSearchPlate"); ? ? ? //--暴力反射,只有暴力反射才能拿到私有屬性 ? ? ?? ? ? ? ownField.setAccessible(true); ? ? ? View mView = (View) ownField.get(mSearchView); ? ? ? //--設(shè)置背景? ? ? ? mView.setBackgroundColor(Color.TRANSPARENT); ? ? } catch (Exception e) { ? ? ? e.printStackTrace(); }
問(wèn)題2:自定義文字與光標(biāo)的顏色
int searchPlateId = mSearchView.getContext().getResources() ? ?.getIdentifier("android:id/search_plate", null, null); View searchPlate = mSearchView.findViewById(searchPlateId); if (searchPlate != null) { ? ?int searchTextId = searchPlate.getContext().getResources() ? ?.getIdentifier("android:id/search_src_text", null, null); ? ?//自定義文本顏色 ? ?TextView searchText = (TextView) searchPlate.findViewById(searchTextId); ? ?if (searchText != null) ? ?{ ? ? ? searchText.setTextColor(Color.WHITE); ? ? ? searchText.setHintTextColor(Color.WHITE); ? ?} try { ? ?//自定義光標(biāo)顏色 ? ?Field mCursorDrawableRes=TextView.class.getDeclaredField("mCursorDrawableRes");? ? ?mCursorDrawableRes.setAccessible(true);? ? ?mCursorDrawableRes.set(searchText, R.drawable.cursor_color);? } catch (Exception e){} }
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> ?? ?<solid ?? ??? ?android:color="#FFFF0000"/> ?? ?<size ?? ??? ?android:width="1dp"/> </shape>
問(wèn)題3:改變圖標(biāo)渲染顏色為白色
- 首先用Toolbar代替ActionBar
- 然后為Toolbar添加屬性
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解決Android SearchView不顯示搜索icon的問(wèn)題
- Android開發(fā)之搜索框SearchView用法示例
- Android自定義View實(shí)現(xiàn)搜索框(SearchView)功能
- Android仿簡(jiǎn)書動(dòng)態(tài)searchview搜索欄效果
- Android搜索框(SearchView)的功能和用法詳解
- Android搜索框SearchView屬性和用法詳解
- Android SearchView搜索框組件的使用方法
- Android搜索框組件SearchView的基本使用方法
- 可支持快速搜索篩選的Android自定義選擇控件
- Android自定義控件實(shí)現(xiàn)UC瀏覽器語(yǔ)音搜索效果
相關(guān)文章
解決Android平臺(tái)中應(yīng)用程序OOM異常的方法
這篇文章主要介紹了解決Android平臺(tái)中應(yīng)用程序OOM異常的方法,通常這一塊也是程序中的重點(diǎn)之一,感興趣的小伙伴們可以參考一下2015-12-12Android中View跟隨手指滑動(dòng)效果的實(shí)例代碼
這篇文章主要介紹了Android中View跟隨手指滑動(dòng)效果的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android?AMS啟動(dòng)App進(jìn)程原理分析
這篇文章主要介紹了Android?AMS啟動(dòng)App進(jìn)程原理,系統(tǒng)fork函數(shù)是如何創(chuàng)建進(jìn)程,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-05-05詳解Android沉浸式實(shí)現(xiàn)兼容解決辦法
本篇文章主要介紹了詳解Android沉浸式實(shí)現(xiàn)兼容解決辦法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11教你五分鐘實(shí)現(xiàn)Android超漂亮的刻度輪播控件實(shí)例教程
說(shuō)到輪播圖,想必大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何利用五分鐘快速實(shí)現(xiàn)一款超漂亮的Android刻度輪播控件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2018-09-09Android RecyclerView實(shí)現(xiàn)下拉刷新和上拉加載更多
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView實(shí)現(xiàn)下拉刷新和上拉加載更多,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android利用ContentProvider初始化組件的踩坑記錄
做Android SDK開發(fā)的時(shí)候,一般我們會(huì)將初始化的方法封裝,然后讓調(diào)用SDK的開發(fā)者在Application的onCreate方法中進(jìn)行初始化,下面這篇文章主要給大家介紹了關(guān)于Android利用ContentProvider初始化組件的踩坑記錄,需要的朋友可以參考下2022-04-04詳解Flutter?響應(yīng)式狀態(tài)管理框架GetX
這篇文章主要為大家介紹了Flutter?響應(yīng)式狀態(tài)管理框架GetX詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09