0

DrawerLayout 및 AppBarLayout에 문제가 있습니다. NavigationDrawer를 만들기 위해 DrawerLayout을 추가해야합니다. DrawerLayout을 추가하면 전체 레이아웃이 파란색으로 그려집니다. 내비게이션 서랍은 스 와이프를 통해서만 열리 며 버튼 클릭만으로 작동하지 않습니다. 나는 그 문제가 무엇인지 이해하지 못한다. 도와주세요, 제발.DrawerLayout 및 AppBarLayout 문제

enter image description here

이 내 메인 레이아웃입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:expanded="false"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="@color/colorPrimary" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       app:tabMode="scrollable" /> 
     </android.support.design.widget.AppBarLayout> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewPager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

     <android.support.design.widget.NavigationView 
      android:id="@+id/nav_view" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:fitsSystemWindows="true" 
      app:menu="@menu/drawermenu" /> 
    </android.support.v4.widget.DrawerLayout> 
</android.support.design.widget.CoordinatorLayout> 

그리고 이것은 내 주요 활동 코드 다음 AppBar의 버튼 중 어느 것도 아무튼 없기 때문에 레이아웃 문제

package com.jeffe.tabstest; 

import android.content.Intent; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuItem; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private DrawerLayout drawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 

     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, 
       R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawerLayout.addDrawerListener(toggle); 
     toggle.syncState(); 

     viewPager = (ViewPager)findViewById(R.id.viewPager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout)findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     assert navigationView != null; 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     drawerLayout.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    @Override 
    public void onBackPressed() { 
     assert drawerLayout != null; 
     if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
      drawerLayout.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new MusicTab(), "Tab1"); 
     adapter.addFragment(new AnimeTab(), "Tab2"); 
     adapter.addFragment(new ArtistTab(), "Tab3"); 
     adapter.addFragment(new AlbumTab(), "Tab4"); 
     adapter.addFragment(new FavoritesTab(), "Tab5"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

뭔가 일하지 마라. 그러나 DrawerLayout을 추가하기 전에 모든 것이 완벽하게 작동했습니다.

+1

도움이 될 것입니다 바랍니다. 당신은 두 가지를 가지고 있으며, 그것의 전체 주요 내용처럼'AppBarLayout'을 다루고 있습니다. [이 게시물] (http://stackoverflow.com/questions/30719369/android-design-library-coordinatorlayout-appbarlayout-and-drawerlayout)에 표시된 것과 같이 레이아웃을 재정렬 할 수 있습니다. –

+0

고마워, 나는 AppBarLayout을 다른 레이아웃 파일로 옮기고 지금은 완벽하게 작동한다. –

답변

0

가장 오래된 방법 인 ActionBarDrawerToggleNavigationView을 사용하지 마십시오.

이 시도 -

toolbar = (Toolbar)findViewById(R.id.toolbar); 
toolbar.setNavigationIcon(YOUR_MENU_ICON); //set your navigation icon 
setSupportActionBar(toolbar); 


toolbar.setNavigationOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
      drawerLayout.openDrawer(drawerLayout); 
     } 
    }); 

이는`DrawerLayout`는 하나의 주 내용으로`View` 있어야합니다 :)

+0

작동하지 않습니다. 키는 여전히 작동하지 않지만 적어도 NavigationView 애니메이션이었습니다. 이제는 그렇지 않습니다. 블루 스크린은 어때? 내 레이아웃과 관련이 있다고 생각하지만 어떻게 해석할지는 모르겠다. 그건 그렇고, 나는 탭을 누를 수 없다. –

+0

당신을 얻지 못 했나요? 당신이 무엇을 의미하는지 자세히 설명해주십시오. –

+0

AppBar의 아무 버튼도 작동하지 않기 때문에 레이아웃 상 문제가 생겼습니다. –