Toolbar의 햄버거 버튼을 누르면 메뉴가 나오는 Navigation Drawer를 만들기 위해 activity_main.xml의 NavigationView 태그를 주석처리하면 아래의 사진처럼 실행은 됩니다. 그러나 주석처리를 없애면 바로 튕겨버립니다..
activity_main.xml의 NavigationView 태그 위치가 문제인 것 같아서 이리저리 바꿔보았지만, 같은 이유로 계속 강제 종료 되었습니다.
해결방법을 찾고 싶습니다!
Logcat:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 17929
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #10 in com.example.myapplication:layout/activity_main: Binary XML file line #10 in com.example.myapplication:layout/activity_main: Error inflating class com.google.android.material.navigation.NavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: android.view.InflateException: Binary XML file line #10 in com.example.myapplication:layout/activity_main: Binary XML file line #10 in com.example.myapplication:layout/activity_main: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: android.view.InflateException: Binary XML file line #10 in com.example.myapplication:layout/activity_main: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:854)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
at com.example.myapplication.MainActivity.onCreate(MainActivity.java:50)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #27 in com.example.myapplication:layout/nav_header_main: Binary XML file line #27 in com.example.myapplication:layout/nav_header_main: Error inflating class TextView
Caused by: android.view.InflateException: Binary XML file line #27 in com.example.myapplication:layout/nav_header_main: Error inflating class TextView
Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 2 to dimension: type=0x1
at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:786)
at android.widget.TextView.readTextAppearance(TextView.java:3971)
at android.widget.TextView.<init>(TextView.java:1064)
at android.widget.TextView.<init>(TextView.java:968)
at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
at com.google.android.material.textview.MaterialTextView.<init>(MaterialTextView.java:93)
at com.google.android.material.textview.MaterialTextView.<init>(MaterialTextView.java:88)
at com.google.android.material.textview.MaterialTextView.<init>(MaterialTextView.java:83)
at com.google.android.material.theme.MaterialComponentsViewInflater.createTextView(MaterialComponentsViewInflater.java:61)
at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1551)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1602)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1061)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at com.google.android.material.internal.NavigationMenuPresenter.inflateHeaderView(NavigationMenuPresenter.java:222)
at com.google.android.material.navigation.NavigationView.inflateHeaderView(NavigationView.java:387)
at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:241)
at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:122)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:854)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
at com.example.myapplication.MainActivity.onCreate(MainActivity.java:50)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
MainActivity.java:
public class MainActivity extends AppCompatActivity {
// 툴바
private Toolbar toolbar;
private DrawerLayout drawerLayout;
private NavigationView navigationView;
// 가운데
private ViewPager2 viewPager2;
private DotsIndicator dotsIndicator;
private ArrayList<DataPage> list;
// 바텀네비게이션뷰
private BottomNavigationView bottomNav;
private FragmentManager fragmentManager = getSupportFragmentManager();
private SearchPage fragmentSearch = new SearchPage();
private HomePage fragmentHome = new HomePage();
private CafePage fragmentCafe = new CafePage();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 바텀네비게이션
bottomNav = findViewById(R.id.navigationView);
bottomNav.setOnNavigationItemSelectedListener(new ItemSelectedListener());
this.InitializeLayout(); // 툴바
this.viewpage(); // 뷰페이저
//FragmentTransaction transaction = fragmentManager.beginTransaction();
//transaction.replace(R.id.frameLayout, fragmentSearch).commitAllowingStateLoss();
// 바텀네비게이션
}
//툴바
private void InitializeLayout() {
//toolBar를 통해 App Bar 생성
toolbar = findViewById(R.id.toolbar);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
//navigationView = (NavigationView) findViewById(R.id.nav_view);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false); // 기존 title 지우기
actionBar.setDisplayHomeAsUpEnabled(true); // 왼쪽 버튼 사용 여부 true
actionBar.setHomeAsUpIndicator(R.drawable.ic_reorder_white_24dp); // 왼쪽 버튼 이미지 설정
// 툴바 오른쪽 버튼
@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, menu);
return true;
}
//추가된 소스, ToolBar에 추가된 항목의 select 이벤트를 처리하는 함수
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//return super.onOptionsItemSelected(item);
int id = item.getItemId();
switch (id) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
Toast.makeText(getApplicationContext(), "메뉴 버튼 클릭됨", Toast.LENGTH_LONG).show();
return true;
}
return super.onOptionsItemSelected(item);
}
private void viewpage(){
list = new ArrayList<>();
list.add(new DataPage(R.drawable.sample_1, "Starbucks", 4900));
list.add(new DataPage(R.drawable.sample_2, "Twosome Place", 4100));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
list.add(new DataPage(R.drawable.sample_3, "EDIYA", 3000));
viewPager2 = findViewById(R.id.viewPager2);
viewPager2.setAdapter(new ViewPagerAdapter(list));
dotsIndicator = findViewById(R.id.dots_indicator);
dotsIndicator.setViewPager2(viewPager2);
}
//바텀네비
class ItemSelectedListener implements BottomNavigationView.OnNavigationItemSelectedListener {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (menuItem.getItemId()) {
case R.id.searchItem:
transaction.replace(R.id.frameLayout, fragmentSearch).commitAllowingStateLoss();
break;
case R.id.homeItem:
transaction.replace(R.id.frameLayout, fragmentHome).commitAllowingStateLoss();
break;
case R.id.cafeItem:
transaction.replace(R.id.frameLayout, fragmentCafe).commitAllowingStateLoss();
break;
}
return true;
}
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- @@@@@이 부분만 추가하면 이러한 에러 발생 @@@@@@-->
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@drawable/side_nav_bar_white"
android:fitsSystemWindows="false"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemTextAppearance="@style/text_size">
</com.google.android.material.navigation.NavigationView>
<!-- @@@@@이 부분만 추가하면 이러한 에러 발생 @@@@@@-->
<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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/cfb"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<TextView
android:id="@+id/toolbar_title"
android:text="@string/app_name"
android:textSize="25sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</androidx.appcompat.widget.Toolbar>
<FrameLayout
android:id="@+id/content_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="500dp"
android:layout_marginTop="100dp"
android:background="@color/cfb"
tools:context=".MainActivity">
<TextView
android:id="@+id/TitleText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title2"
android:textColor="#000000"
android:textSize="30sp"
android:textStyle="bold"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toTopOf="@+id/viewPager2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageButton
android:id="@+id/refreshButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:layout_marginLeft="30dp"
android:layout_marginBottom="20dp"
android:background="@color/cfb"
app:layout_constraintBottom_toTopOf="@+id/viewPager2"
app:layout_constraintStart_toEndOf="@+id/TitleText2"
app:srcCompat="@drawable/refresh_111075__2_" />
<TextView
android:id="@+id/refreshText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/refresh"
android:textColor="#000000"
android:textSize="18sp"
android:layout_marginStart="20dp"
android:layout_marginLeft="20dp"
app:layout_constraintStart_toEndOf="@+id/TitleText2"/>
<ImageButton
android:id="@+id/filterButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="10dp"
android:layout_marginEnd="15dp"
android:layout_marginRight="28dp"
android:background="@color/cfb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/dots_indicator"
app:srcCompat="@drawable/filter"
/>
<TextView
android:id="@+id/filterText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="25dp"
android:layout_marginRight="40dp"
android:text="@string/filter"
android:textColor="#000000"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/filterButton" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="270dp"
android:layout_height="270dp"
android:layout_marginBottom="130dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintVertical_bias="0.3" />
<com.tbuonomo.viewpagerdotsindicator.DotsIndicator
android:id="@+id/dots_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="110dp"
app:dotsColor="@color/white"
app:dotsCornerRadius="8dp"
app:dotsSize="14dp"
app:dotsSpacing="4dp"
app:dotsWidthFactor="2.5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/viewPager2"
app:layout_constraintBottom_toBottomOf="parent"
app:progressMode="true"
app:selectedDotColor="@color/black" />
<ImageView
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="70dp"
android:clickable="true"
app:srcCompat="@drawable/cafebot" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/navigationView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:menu="@menu/bottom_nav" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
</LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout>
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)