강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

sotech_edu_027님의 프로필 이미지
sotech_edu_027

작성한 질문수

윤재성의 자바 기반 안드로이드 앱개발 Part 2 - 메뉴와 4대 구성요소

6강 Option Menu

섹션 2-2 OptionMenu

작성

·

22

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

다른분들 질문이랑 같아요.,..

저는 실행했을 때 상단 바가 보이지도 않아요

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding activityMainBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);

        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(activityMainBinding.getRoot());

        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
    }

    //옵션 메뉴를 구성하는 메서드
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //xml 파일로부터 메뉴를 생성하는 객체
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main_menu, menu); //res/menu/main_menu.xml 파일을 메뉴로 사용
        return true;
    }

    //사용자가 메뉴를 선택 했을 때 호출되는 메서드
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        //사용자가 터치한 메뉴의 객체가 item으로 들어옴

        //item에서 아이디 추출
        int id = item.getItemId();

        switch (id) {
            case R.id.menu_item1:
                activityMainBinding.textView.setText("메뉴항목 1을 선택했습니다");
                break;
            case R.id.menu_item3:
                activityMainBinding.textView.setText("메뉴항목 3을 선택했습니다");
                break;
            case R.id.sub_item1:
                activityMainBinding.textView.setText("하위 메뉴 1을 선택했습니다");
                break;
            case R.id.sub_item2:
                activityMainBinding.textView.setText("하위 메뉴 2를 선택했습니다");
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>

 

 

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/menu_item1"
        android:title="메뉴항목1" />
    <item
        android:id="@+id/menu_item2"
        android:title="메뉴 항목2" >
        <menu >
            <item
                android:id="@+id/sub_item1"
                android:title="하위 메뉴1" />
            <item
                android:id="@+id/sub_item2"
                android:title="하위메뉴2" />
        </menu>
    </item>
    <item
        android:id="@+id/menu_item3"
        android:title="메뉴 항목3" />
</menu>

 

 

대체 어디가 잘못된걸까요...

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. sotech_edu_027님.

상단 바(액션바)가 보이지 않는 문제는 여러 원인으로 발생할 수 있습니다. 아래 몇 가지 확인사항을 안내드리겠습니다.

  1. 잘못된 테마 설정 확인: 액션바가 없는 테마가 설정되어 있을 수 있습니다. styles.xml 파일을 확인해보세요. Theme.AppCompat 계열의 테마가 설정되어 있어야 합니다. 예를 들면:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryDarkColor</item>
        <item name="colorAccent">@color/accentColor</item>
    </style>
    
  2. Activity에 잘못된 테마 적용 확인: AndroidManifest.xml 파일에서 MainActivity에 할당된 테마가 액션바가 포함된 적절한 테마인지 확인해 보세요.

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        ...
    </activity>
    
  3. 메서드 내 요소 확인: onCreate 메서드 내에서 EdgeToEdge.enable(this);를 사용하고 계시는데, 이 메서드가 시스템 UI 요소를 걸러서 표시할 수 있으니 관련 문서를 확인하여 적절히 설정되었는지 확인하세요.

  4. 아예 표시되지 않을 때: 레이아웃 파일을 제대로 inflate하지 않았거나, view의 ID가 일치되지 않아서 발생할 수 있습니다. 특히 main_menu.xml 파일이 제대로 inflate되지 않는 경우 방법이 제대로 실행되지 않을 수 있습니다.

다음과 관련된 내용들을 종합하여, 아래 링크의 답변도 참고하시면 도움이 될 것입니다:

  • onCreateOptionsMenu 작동 안됨. 이 게시물은 onCreateOptionsMenu 설정에 있어 여러 사용자들이 겪는 문제와 그 해결 방법에 대해 다루고 있습니다.

위 방법들이 실패할 경우, 추가로 발생한 오류 메시지를 공유해 주시면 더 정확한 답변도 가능합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sotech_edu_027님의 프로필 이미지
sotech_edu_027

작성한 질문수

질문하기