상세 컨텐츠

본문 제목

[Android]메뉴 사용하기

Android 개발

by mobile 2012. 8. 26. 20:13

본문

반응형

▶ 메뉴사용하기

안드로이드에서 제공하는 메뉴는 크게 두가지가 있습니다.

 속성

설명 

옵션 메뉴 

하드웨어 [메뉴]버튼을 눌렀을 때 나타나는 메뉴로 각각의 화면마다 설정된 주요 메뉴 입니다. 옵션 메뉴는 최대 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)


▷ 참고소스

SampleLoginWithMenu.zip


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

    }

}



반응형

관련글 더보기

댓글 영역