수색…


통사론

  • inflater.inflate (menu.your_xml_file, menu);

매개 변수

매개 변수 기술
inflate(int menuRes, Menu menu) 지정된 XML 자원에서 메뉴 계층을 확장합니다.
getMenuInflater () 이 문맥을 가지는 MenuInflater 를 돌려줍니다.
onCreateOptionsMenu (Menu menu) 활동 표준 옵션 메뉴의 내용을 초기화하십시오. 메뉴 항목을 메뉴에 배치해야합니다.
onOptionsItemSelected (MenuItem item) 이 메소드는 옵션 메뉴의 항목이 선택 될 때마다 호출됩니다.

비고

메뉴에 대해 더 알고 싶다면 글을 읽으십시오. 희망이 도움이됩니다!

칸막이가있는 옵션 메뉴

Android에는 기본 옵션 메뉴가 있으며 여러 옵션을 사용할 수 있습니다. 더 많은 수의 옵션을 표시해야하는 경우 명확성을 유지하기 위해 해당 옵션을 그룹화하는 것이 좋습니다. 옵션은 그 사이에 구분선 (예 : 수평선)을 넣어 그룹화 할 수 있습니다. 분배자를 허용하기 위해 다음 주제가 사용될 수 있습니다.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">@color/black</item>
    <item name="android:dividerHeight">1dp</item>
</style>

테마를 변경하면 분할자를 메뉴에 추가 할 수 있습니다.

메뉴에 사용자 정의 글꼴 적용

public static void applyFontToMenu(Menu m, Context mContext){
    for(int i=0;i<m.size();i++) {
        applyFontToMenuItem(m.getItem(i),mContext);
    }
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
    if(mi.hasSubMenu())
        for(int i=0;i<mi.getSubMenu().size();i++) {
            applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
        }
    Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
    SpannableString mNewTitle = new SpannableString(mi.getTitle());
    mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    mi.setTitle(mNewTitle);
}

그리고 나서 활동에서 :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    applyFontToMenu(menu,this);
    return true;
}

활동에 메뉴 만들기


자신의 메뉴를 정의하려면 프로젝트의 res/menu/ 디렉토리에 XML 파일을 만들고 다음 요소가있는 메뉴를 빌드하십시오.

  • <menu> : 모든 메뉴 항목을 포함하는 메뉴를 정의합니다.
  • <item> : 메뉴의 단일 항목을 나타내는 MenuItem을 만듭니다. 하위 메뉴를 만들기 위해 중첩 된 요소를 만들 수도 있습니다.

1 단계:

다음과 같이 자신의 XML 파일을 만듭니다.

res/menu/main_menu.xml 다음을 res/menu/main_menu.xml .

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/aboutMenu"
        android:title="About" />
    <item
        android:id="@+id/helpMenu"
        android:title="Help" />
    <item
        android:id="@+id/signOutMenu"
        android:title="Sign Out" />
</menu>

2 단계:

옵션 메뉴를 지정하려면 작업 에서 onCreateOptionsMenu() 를 재정의하십시오.

이 방법에서는 메뉴 리소스 (XML 파일 즉, res/menu/main_menu.xml )를 확장 할 수 있습니다.

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

사용자가 옵션 메뉴에서 항목을 선택하면 시스템은 사용자 작업의 재정의 된 onOptionsItemSelected() 메서드를 onOptionsItemSelected() 합니다.

  • 이 메서드는 선택된 MenuItem을 전달합니다.
  • 메뉴 항목의 고유 ID를 반환하는 getItemId() 를 호출하여 항목을 식별 할 수 있습니다 (메뉴 리소스 res/menu/main_menu.xmlandroid:id attribute 에 의해 정의 res/menu/main_menu.xml ). * /
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.aboutMenu:
            Log.d(TAG, "Clicked on About!");
            // Code for About goes here
            return true;
        case R.id.helpMenu:
            Log.d(TAG, "Clicked on Help!");
            // Code for Help goes here
            return true;
        case R.id.signOutMenu:
            Log.d(TAG, "Clicked on Sign Out!");
            // SignOut method call goes here
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

마무리!

Activity 코드는 다음과 같습니다.

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "mytag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.aboutMenu:
                Log.d(TAG, "Clicked on About!");
                // Code for About goes here
                return true;
            case R.id.helpMenu:
                Log.d(TAG, "Clicked on Help!");
                // Code for Help goes here
                return true;
            case R.id.signOutMenu:
                Log.d(TAG, "User signed out");
                // SignOut method call goes here
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

나만의 메뉴 모양 스크린 샷 :

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow