2013년 4월 24일 수요일

[Android] Action Bar Usage (Action Bar 사용방법 예제)

ActionBar 사용방법에 대한 예제가 Open Source에 있어서 포스팅 하려고 합니다. 소스에 특별한 내용은 없으나 우리가 Action Bar를 사용 할 때 생각해야 될 부분 중에 하나인 작은 화면에서의 Action Bar의 item을 효율에 관한 소스라고 생각 되어 포스팅 합니다. Action Bar내용이 아닌 소스 내용은 주석을 참고 해서 보시면 됩니다.  Open Source 클래스 중 ActionBarUsage클래스 내용입니다.

<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;
 }
}


참조

댓글 없음:

댓글 쓰기