Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DrawerLayout navigation drawer not displayed

I'm trying to display navigation drawer in my toolbar. As I think I have already written everything which it needs but nothing is displayed in toolbar. Only text Zoo. Not icon for display navbar

I'm new at android and it wont be surprise for me if I'm missing something.

Here's my MainActivity.java

package com.example.zoo;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mActionBarDrawerToggle;

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_Layout);
        mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_opened, R.string.drawer_closed){
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (getSupportActionBar() != null) {
                    getSupportActionBar().setTitle(R.string.drawer_opened);
                }
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (getSupportActionBar() != null) {
                    getSupportActionBar().setTitle(R.string.drawer_closed);
                }
            }
        };

        mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mActionBarDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mActionBarDrawerToggle.onConfigurationChanged(newConfig);
    }

    @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_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        if(mActionBarDrawerToggle.onOptionsItemSelected(item))
            return true;

        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Here's my content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.gsiradze.zoo.MainActivity"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
   android:id="@+id/toolbar"
   android:layout_height="wrap_content"
   android:layout_width="match_parent"
   android:background="?attr/colorPrimary"
   android:minHeight="?android:attr/actionBarSize"/>

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <ListView
        android:id="@+id/drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/white"/>

  </android.support.v4.widget.DrawerLayout>

</LinearLayout>

and of course I have these string names

<resources>
    <string name="drawer_opened">Select an item</string>
    <string name="drawer_closed">Zoo</string>
</resources>
like image 831
gsiradze Avatar asked Oct 18 '22 20:10

gsiradze


1 Answers

The problem is this line:

getSupportActionBar().setDisplayShowHomeEnabled(true);

For your current setup, it should be:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

You could also, instead, use the five-parameter constructor for the Toggle, and pass your Toolbar object as the third argument.

mActionBarDrawerToggle = new ActionBarDrawerToggle(this,
                                                   mDrawerLayout,
                                                   toolbar,
                                                   R.string.drawer_opened,
                                                   R.string.drawer_closed) {...};

In this case, you can omit the support ActionBar set*() calls, and the onOptionsItemSelected(item) check on the Toggle. This is useful if your Toolbar is not set as the support ActionBar. However, the documentation recommends the four-parameter constructor, and thus your current setup, if the Toolbar is set as such.

like image 200
Mike M. Avatar answered Oct 30 '22 21:10

Mike M.