前言:
可以代替EditText的東西。如果要做收尋一般我都會想到EditText。
但android有一個官方使用的SearchView
也可以考慮使用
程式碼:
activity_main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.hello.kaiser.searchviewtest.MainActivity"> <android.support.v7.widget.SearchView android:id="@+id/search_view" style="@style/Theme.SearchView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello World!" /> </LinearLayout>
看到上方佈局文件內的style嗎?
我們要在values內的styles寫入我們需要的東西。
styles.xml |
<style name="Theme.SearchView" parent="Base.Widget.AppCompat.SearchView"> <item name="searchIcon">@drawable/search_icon</item> <item name="closeIcon">@drawable/icon_search_bar_dismiss</item> ·<item name="queryHint">你好我是自訂的底文字</item> <!--<item name="queryBackground">@drawable/background</item>--> </style>
上面drawable內的東西就自己去google下載自己喜歡的圖面囉。這裡就不提供了。
可以試試看效果了
大概就是上述的效果。
如果不需要icon點進去,想要直接顯示SearchView的話呢?
//原本點擊SearchIcon才會出現搜尋的那個icon,改成在整條searchView前方顯示 mSearchView.setIconifiedByDefault(false);
此時就會變成這樣。
原本的searchIcon會移到前面去。
後面的closeIcon在你已經打了文字後才會出現。而且closeIcon的效果變成刪除所有文字內容。
如此我們客製化的內容已經完成了。
但如果我們要讓前面的searchIcon消失呢?
因為styles內的設定不可以是null
所以我們就可以使用程式碼。
//讓searchIcon消失or自訂 ImageView searchIcon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); searchIcon.setImageDrawable(null);順利讓前方的null消失了!
除了style的方式外,也可以拿程式碼的方式更換自己想要的圖片。
我提供兩個示意,方法可以自己依樣畫葫蘆。上方用style可以完成的事情,用程式碼都可以完成。
//自訂closeIcon ImageView closeIcon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); closeIcon.setImageResource(R.drawable.search_dismiss); mSearchView.setQueryHint("搜尋..."); //自訂文字size TextView textview = (TextView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); textview.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.default_font_size));還有一個比較特別的submit方法。
在SearchView旁邊會出現一個箭頭,按下去就是送出搜尋結果的意思。
//設置true打了文字後旁會邊出現箭頭,代表submit mSearchView.setSubmitButtonEnabled(true);
客製化的畫面完成囉。
簡易使用:
這時候就要參照官方文檔了。https://developer.android.com/reference/android/widget/SearchView.html
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { Toast.makeText(MainActivity.this, "搜尋結果為:" + query, Toast.LENGTH_SHORT).show(); return false; } @Override public boolean onQueryTextChange(String newText) { Log.d("當文字改變時", "改變的文字 :" + newText); return false; } });
如上述onQueryTTextSubmit是當你按下enter時觸發。
onQueryTextChange是當你在SearchView上打的每一個文字都會觸發的效果,詳細可以見你的Log
完整MainActivity.java程式碼:
public class MainActivity extends AppCompatActivity {
private SearchView mSearchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSearchView = (SearchView) findViewById(R.id.search_view);
//讓searchIcon消失or自訂
ImageView searchIcon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
searchIcon.setImageDrawable(null);
//自訂closeIcon
// ImageView closeIcon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
// closeIcon.setImageResource(R.drawable.search_dismiss);
// mSearchView.setQueryHint("搜尋...");
//自訂文字size
// TextView textview = (TextView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
// textview.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.default_font_size));
//原本點擊SearchIcon才會出現搜尋的那個icon,改成在整條searchView前方顯示
mSearchView.setIconifiedByDefault(false);
//設置true打了文字後旁會邊出現箭頭,代表submit
mSearchView.setSubmitButtonEnabled(true);
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(MainActivity.this, "搜尋結果為:" + query, Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
Log.d("當文字改變時", "改變的文字 :" + newText);
return false;
}
});
}
}
demo:https://drive.google.com/open?id=0Byk75IYx-dKXZzJqWWo5b0RSSkU
沒有留言:
張貼留言