230

While I'm doing something on my app, I see that the navigation drawer on my app reduced its size. But I'm not doing anything on that.

navigation drawer

Then, after checking the code, I saw that setDrawerListener is deprecated. Does anyone has a solution to this?

drawerLayout.setDrawerListener(actionBarDrawerToggle);
SecretAgentMan
  • 2,856
  • 7
  • 21
  • 41
david glorioso
  • 2,567
  • 2
  • 9
  • 13
  • 9
    The deprecated code probably has nothing to do with the drawer size. It means that they will remove support for it in the future (the specific method). It probably is replaced with an addDrawerListener but I'm not sure on that. – chRyNaN Feb 25 '16 at 22:20
  • i see.. but i can't see any problem, I just created a new fragment that is not connected on that drawer.. can't really understand why that thing happened... – david glorioso Feb 25 '16 at 22:27
  • what version of library you are using ? – Amit Vaghela Feb 26 '16 at 04:38
  • I'm using this >> compile 'com.android.support:appcompat-v7:23.2.0' , compile 'com.android.support:design:23.2.0', compile 'com.android.support:support-v4:23.2.0' – david glorioso Feb 26 '16 at 06:19

5 Answers5

764

Use addDrawerListener() instead.

GabrielOshiro
  • 7,986
  • 4
  • 45
  • 57
Luxi Liu
  • 7,878
  • 2
  • 14
  • 13
87

Replace:

drawer.setDrawerListener(...);

with

drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) Sets a listener to be notified of drawer events.

Note that this method is deprecated and you should use addDrawerListener(DrawerLayout.DrawerListener) to add a listener and removeDrawerListener(DrawerLayout.DrawerListener) to remove a registered listener.

GabrielOshiro
  • 7,986
  • 4
  • 45
  • 57
Jzapata
  • 2,442
  • 1
  • 12
  • 9
  • 18
    Where should we remove the drawer listener and is this necessary? – portfoliobuilder Dec 21 '16 at 18:48
  • @portfoliobuilder It depends. Generally, it's not necessary. If you set it in `onCreate()` and you rotate screen whole activity is recreated and new listener is set. More complex cases should be handled with thought that (probably) there is no need to have more than 1 listener set to `DrawerLayout`. – Johnny Five Mar 20 '19 at 10:21
30

Replace setDrawerListener

drawerLayout.setDrawerListener(actionBarDrawerToggle);

with addDrawerListener

drawerLayout.addDrawerListener(actionBarDrawerToggle);

example

  DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            assert drawer != null;
            drawer.addDrawerListener(toggle);
            toggle.syncState();

            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            assert navigationView != null;
            navigationView.setNavigationItemSelectedListener(this);
busy
  • 23
  • 5
sivaBE35
  • 1,876
  • 18
  • 23
22

I guess I'm gonna answer my question. The latest navigationView produces its default android:layout_height at almost 18dp when you choose "wrap_content". So, you must choose the android:layout_height that you want for your navigationView or simply make android:layout_height="match_parent".

<android.support.design.widget.NavigationView
    android:layout_width="320dp"
    android:layout_height="550dp"
    android:id="@+id/navigation_view_admin"
    android:layout_gravity="start">

</android.support.design.widget.NavigationView>

Anyways, it's height automatically increases when you add an item in the navigation drawer.

Lastly, Use addDrawerListener() instead of setDrawerListener() as Luxi Liu said.

mavrosxristoforos
  • 3,573
  • 2
  • 25
  • 40
david glorioso
  • 2,567
  • 2
  • 9
  • 13
0

In Official Android Developer Documentsenter image description here