<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; } }
참조
댓글 없음:
댓글 쓰기