[ 실행 화면 ]
앞 포스팅 Navigation drawer activity와 관련해서 ActionBar에 Menu를 추가할 수 있길래 시도해봤다.
마찬가지로 참고한 사이트는 https://ju-hy.tistory.com/53 여기이다.
우선 menu 폴더에서 menu_임의지정.xml 형식으로 파일을 하나 만들어준다.
[ menu_123.xml ]
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:title="새로고침"
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_menu_camera"
app:showAsAction="always"/>
<item
android:id="@+id/menu_search"
android:title="검색"
android:icon="@drawable/ic_menu_gallery"
app:showAsAction="always" />
<item
android:id="@+id/menu_settings"
android:title="설정"
android:icon="@drawable/ic_menu_slideshow"
app:showAsAction="always" />
</menu>
그리고 ActionBar에 넣어주고 싶은 item 들을 차례로 써준다.
기본적으로 drawable 폴더에 있는 이미지들로 만들어주려고 icon 사진은 크게 신경쓰지 않았다.
[ MainActivity.java ]
package com.example.naviactivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.widget.Toast;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import androidx.annotation.NonNull;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import com.example.naviactivity.databinding.ActivityMainBinding;
import org.jetbrains.annotations.NonNls;
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
private ActivityMainBinding binding;
//강의에서는 binding의 개념이 도입되기 전인듯?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.appBarMain.toolbar);
binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//snackbar는 toast 메시지랑 비슷한것, 더업그레이드 된 버전
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null)
.setAnchorView(R.id.fab).show();
}
});
DrawerLayout drawer = binding.drawerLayout;
//강의에서는 DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = binding.navView; //네비게이션 뷰의 선언
//강의에서는 NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setOpenableLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//앱을 시작할때 옵션 메뉴를 생성해주게 되는데...
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_123, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item){
// int curId = item.getItemId();
// switch(curId){
// case R.id.menu_refresh:
// Toast.makeText(this, "Refresh Clicked", Toast.LENGTH_SHORT).show();
// break;
// case R.id.menu_search:
// Toast.makeText(this, "Search Clicked", Toast.LENGTH_SHORT).show();
// break;
// case R.id.menu_settings:
// Toast.makeText(this, "Settings Clicked", Toast.LENGTH_SHORT).show();
// break;
// default:
// break;
// }
//
// return super.onOptionsItemSelected(item);
// }
// }
}
onCreateOptionMenu 함수에서
getMenuInflater().inflate(R.menu.menu_123, menu); 로 빨간색 부분을 해당 xml로 변경시켜준다.
참고 사이트에서는 아래에 onOptionsItemSelected 함수도 추가해서
그 아이콘을 클릭했을 때 Toast 메시지가 뜨게 하는 것까지 구현했는데...
저 코드에서는 왜인지 case 문에서 오류가 나서 우선은 주석 처리해 두었다.
이후에 해결되면 다시 추가하는걸로...
'안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오] 앱만들기 #9. WebView (0) | 2024.09.03 |
---|---|
[안드로이드 스튜디오] 앱만들기 #8. SharedPreferences (0) | 2024.08.29 |
[안드로이드 스튜디오] 앱만들기 #7. Navigation Drawer Activity (0) | 2024.08.29 |
[안드로이드 스튜디오] 앱만들기 #6. ListView (0) | 2024.08.27 |
[안드로이드 스튜디오] 앱만들기 #5 패키지구조 & 역할 (0) | 2024.08.27 |