▶ 메뉴사용하기
안드로이드에서 제공하는 메뉴는 크게 두가지가 있습니다.
속성 |
설명 |
옵션 메뉴 |
하드웨어 [메뉴]버튼을 눌렀을 때 나타나는 메뉴로 각각의 화면마다 설정된 주요 메뉴 입니다. 옵션 메뉴는 최대 6개까지의 메뉴 아이템을 포함할 수 있으며 그 이상의 메뉴 아이템을 추가하면 'Move'라는 메뉴 아이템으로 표시됩니다. |
컨텍스트 메뉴 |
화면을 길게 누르면 나타나는 메뉴로 텍스트뷰의 편집 상태를 바꾸거나 할 때 사용하는 메뉴입니다. 뷰에 설정하여 나타나게 할 수 있습니다. |
옵션 메뉴와 컨텍스트 메뉴는 각각의 액티비티마다 설정할 수 있으므로 액티비티에 추가하고 싶은 경우에는 다음의 두 메소드를 다시 정의하여 메뉴 아이템을 추가합니다.
[Reference]
boolean onCreateOptionsMenu(Menu menu)
void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
두 메소드를 다시 정의하기만 하면 매우 쉽게 메뉴를 추가할 수 있습니다. 이 두 개의 메소드를 보면 Menu나 ContextMenu 객체가 전달되는 것을 알 수 있는데 이 객체의 add() 메소드를 이용해 메뉴 아이템을 추가하게 됩니다. 메뉴 아이템을 추가할 수 있는 대표적인 메소드들은 다음과 같습니다.
[Reference]
MenuItem add(int groupId, int itemId, int oreder, CharSequence title)
MenuItem add(int groupId, int itemId, int order, int titleRes)
SubMenu addSubMenu(int titleRes)
groupId값은 아이템을 하나의 그룹으로 묶을 때 사용합니다. itemId는 아이템을 갖는 고유 ID 값으로, 아이템이 선택되었을 때 각각의 아이템을 구분하기 위해 사용할 수 있습니다. 아이템이 많아서 서브 메뉴로 추가하고 싶을 때는 addSubMenu() 메소드를 사용합니다. 메뉴 아이템을 추가할 때 사용할 수 있는 대표적인 메소드들은 다음과 같습니다.
[Reference]
MenuItem section(int iconRes)
MenuItem setTitle(CharSequence title)
MenuItem setVisible(boolean visible)
MenuItem setAlphabeticShortcut(char alphaChar)
MenuItem setNumbericShortcut(char numericChar)
MenuItem setChecked(boolean checked)
MenuItem setEnabled(boolean enabled)
onCreateOptionsMenu() 메소드는 액티비티가 만들어질 때 미리 호출되어 만들어지므로 화면이 띄워지고 나서 메뉴를 바꿀때 onPrepareOptionsMenu() 메소드를 다시 정의하여 사용합니다. 이 메소드는 메뉴가 새로 보일 때마다 호출되므로 메뉴 항목을 추가하거나 뺄 수 있어 메뉴 아이템들을 변경할 수 있도록 합니다. 특히 메뉴의 속성을 바꿀 수 있으므로 메뉴를 활성화 하거나 비활성화하여 사용자에게 애플리케이션의 상태에 따라 메뉴를 사용하지 못하도록 만들 수 있습니다.
사용자가 메뉴 패널을 열고 그 중의 한 아이템을 선택하면 다음과 같은 onOptionsItemSelected()라는 메소드가 호출됩니다.
[Reference]
boolean onOptionsItemSelected(MenuItem item)
▷ 참고소스
▷ SampleLoginWithMenuActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class SampleLoginWithMenuActivity extends Activity {
/**
* Request code defined for Another Activity
*/
public static final int REQUEST_CODE_ANOTHER = 1001;
/**
* Request code defined for About Activity
*/
public static final int REQUEST_CODE_ABOUT = 1002;
/**
* Request code defined for Settings Activity
*/
public static final int REQUEST_CODE_SETTINGS = 1003;
TextView titleLabel;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Button instantiated
Button loginBtn = (Button) findViewById(R.id.loginBtn);
final EditText usernameEntry = (EditText) findViewById(R.id.usernameEntry);
final EditText passwordEntry = (EditText) findViewById(R.id.passwordEntry);
titleLabel = (TextView) findViewById(R.id.titleLabel);
loginBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String username = usernameEntry.getText().toString();
String password = passwordEntry.getText().toString();
boolean isLogged = checkLogin(username, password);
if (isLogged) {
// create a Intent
Intent intent = new Intent(getBaseContext(), AnotherActivity.class);
// start it
startActivityForResult(intent, REQUEST_CODE_ANOTHER);
}
}
});
}
/**
* Check login
*
* @param username
* @param password
*/
private boolean checkLogin(String username, String password) {
// do something for login
Toast toast = Toast.makeText(getBaseContext(), "checkLogin() called. \nusername : " + username + ", password : " + password, Toast.LENGTH_LONG);
toast.show();
return true;
}
/**
* Callback from AnotherActivity
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_ANOTHER) {
Toast toast = Toast.makeText(getBaseContext(), "onActivityResult called with code : " + resultCode, Toast.LENGTH_LONG);
toast.show();
if (resultCode == 1) {
int color = data.getExtras().getInt("color");
toast = Toast.makeText(getBaseContext(), "result color : " + color, Toast.LENGTH_LONG);
toast.show();
titleLabel.setTextColor(color);
}
}
}
public boolean onCreateOptionsMenu(Menu menu)
{
// call the parent to attach any system level menus
super.onCreateOptionsMenu(menu);
// add normal option menus
addOptionMenuItems(menu);
return true;
}
/**
* Add option menu items
*
* @param menu
*/
private void addOptionMenuItems(Menu menu)
{
int base = Menu.FIRST;
MenuItem item01 = menu.add(base, base, Menu.NONE,"Settings");
MenuItem item02 = menu.add(base, base+1, Menu.NONE,"About");
item01.setIcon(R.drawable.settings_icon);
item02.setIcon(R.drawable.about_icon);
}
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == 1)
{
// create a Intent for Settings Activity and launch it
Intent intent = new Intent(getBaseContext(), SettingsActivity.class);
startActivityForResult(intent, REQUEST_CODE_SETTINGS);
}
else if (item.getItemId() == 2)
{
// create a Intent for AboutDialog and launch it
Intent intent = new Intent(getBaseContext(), AboutDialog.class);
startActivityForResult(intent, REQUEST_CODE_ABOUT);
}
return true;
}
}
[Java]난수(Random Number)의 생성 (0) | 2012.09.15 |
---|---|
[Android]키패드 설정하기 (0) | 2012.08.26 |
[Android]시크바 (SeekBar) (1) | 2012.08.26 |
[Android]프로그레스바(ProgressBar) (0) | 2012.08.26 |
[Android]페이지 슬라이딩 사용하기 (0) | 2012.08.25 |
댓글 영역