<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:id=”@+id/action_search”
android:icon=”@android:drawable/ic_menu_search”
android:title=”@string/action_bar_search”
android:showAsAction=”ifRoom”
android:actionViewClass=”android.widget.SearchView” />
<item android:id=”@+id/action_add”
android:icon=”@android:drawable/ic_menu_add”
android:title=”@string/action_bar_add”
android:showAsAction=”collapseActionView”/>
<item android:id=”@+id/action_edit”
android:icon=”@android:drawable/ic_menu_edit”
android:showAsAction=”always”
android:title=”@string/action_bar_edit” />
<item android:id=”@+id/action_share”
android:icon=”@android:drawable/ic_menu_share”
android:title=”@string/action_bar_share”
android:showAsAction=”ifRoom” />
<item android:id=”@+id/action_sort”
android:icon=”@android:drawable/ic_menu_sort_by_size”
android:title=”@string/action_bar_sort”
android:showAsAction=”ifRoom”>
<menu>
<item android:id=”@+id/action_sort_size”
android:icon=”@android:drawable/ic_menu_sort_by_size”
android:title=”@string/action_bar_sort_size”
android:onClick=”onSort” />
<item android:id=”@+id/action_sort_alpha”
android:icon=”@android:drawable/ic_menu_sort_alphabetically”
android:title=”@string/action_bar_sort_alpha”
android:onClick=”onSort” />
</menu>
</item>
</menu>
SearchView를 사용 하기 위해서 android:actionViewClass를 사용 하여 Android에서 제공하고 있는 android.widget.SearchView 경로를 사용한 것을 확인 할 수 있습니다. SearchViw는 ShareActionProvider와 마찬가지로 Android에서 제공하고 있는 클래스를 가져다가 사용만 하면 됩니다. android:showAsAction의 값이 "ifRoom"으로 설정하면 item들이 순차적으로 Action Bar에 보이다가 공간이 부족하면 Menu 버튼을 클릭해야지 보이는걸 확인 할 수 있습니다.id가 action_sort인 item은 서브 메뉴 아이템을 가지고 있는것을 보실 수 있습니다.
public class ActionBarUsage extends Activity implements OnQueryTextListener {
private static final String TAG = "ActionBar_Api_Usage";
private TextView mSearchText;
private int mSortMode = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mSearchText = new TextView(this);
setContentView(mSearchText);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actions, menu);
// Action Bar에서 SearchView를 보여주고 싶을때 사용하는 클래스입니다.
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(this, "Selected Item: " + item.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
}
// Menu의 sort item에서 android:onClick="onSort" 기능으로 호출한다.
public void onSort(MenuItem item) {
mSortMode = item.getItemId();
// onPrepareOptionMenu를 호출 할 수 있어서 sort icon을 바꿀 수 있다.
invalidateOptionsMenu();
}
// invalidateOptionsMenu()메서드를 실행하면 호출된다.
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
if (mSortMode != -1) {
Drawable icon = menu.findItem(mSortMode).getIcon();
menu.findItem(R.id.action_sort).setIcon(icon);
}
return super.onPrepareOptionsMenu(menu);
}
// SearchView에 텍스트를 입력하면 TextView에 바로 적용된다.
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
newText = newText.isEmpty() ? "" : "Query so far : " + newText;
mSearchText.setText(newText);
return false;
}
// Submit을 누르면 onQueryTextSubmit 메소드가 호출된다.
@Override
public boolean onQueryTextSubmit(String query) {
// TODO Auto-generated method stub
Toast.makeText(this, "Searching for: " + query + "...",
Toast.LENGTH_SHORT).show();
return true;
}
}
참조
댓글 없음:
댓글 쓰기