내가 지금까지 개발한 주차장앱,분실물찾기,지금 만들고 있는 공공WIFI앱에는 모두 액션바에 액션항목들이 하나씩 들어가 있습니다.

주차장앱에는 refresh 버튼이, 분실물찾기앱에는 search view, 공공WIFI앱에는 fixed tab과 swipe기능이 추가되었습니다.

이에 대한 이론적인 설명과 소스를 통한 예제를 통한 설명을 해보고자 합니다.

액션 항목(action item) : 액션바에서의 메뉴 혹은 버튼과 같은 뷰를 추가하여 사용자의 편의를 제공하는 UI

액션바와 메뉴 

액션바는 메뉴와 밀접한 관계가 있는데 안드로이드 3.0 이상이 탑재된 단말기의 경우 대부분 메뉴 버튼이 없습니다. 액션바는 다양한 역할을 담당하지만 주된 역할이 메뉴 버튼을 대신하는 것입니다. 따라서 액션바에 메뉴를 추가할 수 있습니다.

	<item 
	    android:id="@+id⁄menu_refresh"
		android:icon="@drawable⁄refresh11"
		android:title="@string⁄menu_refresh"
		android:showAsAction="ifRoom|withText" ⁄>

일반 메뉴 항목을 액션 아이템으로 표시되도록 하는 방법은 크게 두 가지입니다. 하나는 메뉴 XML을 사용하는 방법, 다른 하나는 코드로 구현하는 방법입니다. 두 가지 방법 모두 동일한 결과를 내는 데는 문제가 없지만, 코드를 통해 구현하는 경우 SDK 버전에 맞추어 별도로 코드를 작성해야 하므로 XML을 통해 설정하는 방법을 권장합니다.

ActionItem의 추가와 사용방법은 OptionMenu와 다르지 않습니다. 거의 똑같으나 showAsAction 속성만 추가되었습니다.

속성값은 아래와 같습니다.

 ActionItem showAsAction

never

 ActionBar에서는 보이지 않음

ifRoom   ActionBar에 공간이 있을경우 표시
always  ActionBar에 항상 표시
withText  ActionBar에 텍스트와 아이콘이 함께 표시


	⁄* (non-Javadoc)
	 * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
	 * 다시 api로 데이타 불러와 DB에 update하고 
	 * 화면에 update 표시한다.
	 *⁄
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		⁄⁄ TODO Auto-generated method stub
		switch(item.getItemId()){
		case R.id.menu_refresh:
			Callhtml();
			calcDistance();
			refreshflag = true;
			updateDatainfo(datainfo);
			⁄** 계속 가끔 죽어서 원래 데이타 저장하도록해서 null이 리턴 되면 이전 데이타를 뿌려준다. *⁄
⁄⁄			System.arraycopy(datainfo, 0, datainfo2, 0, datacnt);
			datainfo2 = selectData();
⁄⁄			if(datainfo == null) System.arraycopy(datainfo2, 0, datainfo, 0, datacnt);
			if(datainfo2 == null) Log.d(TAG,"datainfo2 is null");
			appendHeader();
			appendRow(datainfo2);
			this.onWindowFocusChanged(true);
			break;
		}
		return super.onOptionsItemSelected(item);
	}
	
	⁄*
	 * (non-Javadoc)
	 * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
	 * 메뉴를 parking이라는 메뉴로 설정한다.
	 *⁄
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		⁄⁄ Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.parking, menu);
		return true;
	}

위와 같이 메뉴 항목이나 액션 항목을 선택했을 때 수행할 작업 구현은 기존과 동일하게 onOptionsItemSelected() 메서드에서 처리합니다.

SeoulParking_completed.zip

+ Recent posts