Android

안드로이드 search View

Machine_웅 2018. 7. 11. 13:44
728x90
반응형

res  -  menu

 

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">

<item

android:title="search"
android:id="@+id/search"
android:icon="@android:drawable/ic_menu_search"
app:actionViewClass="android.widget.SearchView"
app:showAsAction="always|collapseActionView" />

</menu>

 

 

 

main.java

 

@Override
public boolean onCreateOptionsMenu(Menu menu) {



// 우측 상단 서치뷰
inflater.inflate(R.menu.main_search_view, menu);
main_searchView = menu.findItem(R.id.search);

// 서치뷰 검색 이벤트
setSearchEvent();
return true;
}

 

 

 

// --------------------- 검색 ( 서치뷰 ) onCreateOptionsMenu 내부에서 호출 ---------------------
public void setSearchEvent(){
main_searchView.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override // 서치뷰가 확장되었을 시
public boolean onMenuItemActionExpand(MenuItem item) {
return false;
}

@Override // 서치뷰가 없어졌을시.
public boolean onMenuItemActionCollapse(MenuItem item) {
return false;
}
});






// 검색어 및 검색어 입력 관련 이벤트
SearchView sv = (SearchView)main_searchView.getActionView();
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override // 검색 버튼을 눌렀을 시 이벤트
public boolean onQueryTextSubmit(String query) {


Toast.makeText(MainActivity.this, "검색결과 : "+query, Toast.LENGTH_SHORT).show();
return true;
}

@Override // 글자가 쓰면서 발생하는 이벤트
public boolean onQueryTextChange(String newText) {

Toast.makeText(MainActivity.this, "검색중 : "+newText , Toast.LENGTH_SHORT).show();
return true;
}
});

}
 
// 서치뷰 클릭시 자동 포커스 주기
SearchView sv = (SearchView)main_searchView.getActionView();
sv.setFocusable(true);
sv.setIconified(false);
sv.requestFocusFromTouch();
 

 

 

만약에   서치뷰클릭 후  X 버튼시 이벤트를 따로 처리하고 싶다면.

 

// 서치뷰  닫기 버튼 X 모양 버튼 클릭시 이벤트
sv.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
Toast.makeText(MainActivity.this, "닫기", Toast.LENGTH_SHORT).show();
main_searchView.collapseActionView();
return true;
}
});
728x90
반응형