Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Navigation Drawer hamburger icon missing [closed]

Tags:

android

I have a code here for setting up navigation drawer. All works fine except that the hamburger icon which should be there to click and open the drawer is not appearing.MainActivity:

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.defcomm.invento.NavigationDrawerActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class INVENTO extends AppCompatActivity {

private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_invento);
    toolbar= (Toolbar) findViewById(R.id.app_bar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    NavigationDrawerActivity drawerFragment= (NavigationDrawerActivity)   getSupportFragmentManager().
            findFragmentById(R.id.navigation_drawer);
        drawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawerlayout), toolbar);


}
@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_invento, 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.
    int id = item.getItemId();

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

    return super.onOptionsItemSelected(item);
}

}

Navigation avtivity:

 import android.content.Context;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
  import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.widget.Toolbar;
  import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;


 /**
 * A simple {@link Fragment} subclass.
*/
public class NavigationDrawerActivity extends Fragment {


private ActionBarDrawerToggle mdrawerToggle;
private DrawerLayout mdrawerLayout;

private boolean  mUserLearnedState;
View containerId;
public static final String file_pref_name="Testpef";
public static final String KEY_USER_VALUE="user_learned_drawer";
private boolean mfromSavedInstanceState;
public NavigationDrawerActivity() {
    // Required empty public constructor
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mUserLearnedState=Boolean.valueOf(readPreference(getActivity(),   KEY_USER_VALUE, "false"));
    if (savedInstanceState!=null){
        mfromSavedInstanceState=true;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false);

}


public void setUp(int fragmentId,DrawerLayout drawerlayout,Toolbar toolbar) {
    mdrawerLayout=drawerlayout;
    containerId=getActivity().findViewById(fragmentId);
    mdrawerToggle= new ActionBarDrawerToggle(getActivity(),drawerlayout,
            R.string.drawer_open,R.string.drawer_close){
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            if(!mUserLearnedState){
                mUserLearnedState=true;
                saveToPreference(getActivity(),KEY_USER_VALUE,mUserLearnedState+"");
            }
            getActivity().invalidateOptionsMenu();
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            mdrawerToggle.setDrawerIndicatorEnabled(true);
            getActivity().invalidateOptionsMenu();
        }
    };
    if(!mUserLearnedState&&!mfromSavedInstanceState){
        mdrawerLayout.openDrawer(containerId);
    }

    mdrawerLayout.setDrawerListener(mdrawerToggle);

    mdrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mdrawerToggle.syncState();
            mdrawerToggle.setDrawerIndicatorEnabled(true);
        }
    });

}
public static void saveToPreference (Context context,String preferenceName,String preferenceValue){
    SharedPreferences shared= context.getSharedPreferences(file_pref_name, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor=shared.edit();
    editor.putString(preferenceName,preferenceValue);
    editor.apply();
}
public static String readPreference(Context context,String preferenceName,String defaultValue){
    SharedPreferences share= context.getSharedPreferences(file_pref_name,Context.MODE_PRIVATE);
    return share.getString(preferenceName,defaultValue);
}

}

mainactivity.xml

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/drawerlayout"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout  android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <include
        layout="@layout/app_bar"
        android:id="@+id/app_bar"/>
    <TextView
        android:layout_below="@+id/app_bar"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>
<fragment
    android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:layout="@layout/fragment_navigation_drawer"
    android:name="com.defcomm.invento.NavigationDrawerActivity"
    tools:layout="@layout/fragment_navigation_drawer" />

I don't know where is the fault in this.I 'am using custom toolbar here cross checked that too. But nothing working.I don't know whether the fault is really here.Please help.

like image 709
Midhun Avatar asked Jan 31 '26 02:01

Midhun


2 Answers

  final ActionBar actionBar = getSupportActionBar();
    if(actionBar!=null)
    {
        actionBar.setHomeAsUpIndicator(android.R.drawable.ic_drawer);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

Use above code in your any activity to put the icon of navigation drawer. You can even change it on different activity.

Use this following code --

 @Override
    public void onBackPressed(){
    if(drawer.isDrawerOpen()){ //replace this with actual function which returns        
     drawer.close();    
     // replace this with actual function which closes      drawer
       }
      else{
       super.onBackPressed();
      }
    }
like image 144
Ankit Gupta Avatar answered Feb 01 '26 16:02

Ankit Gupta


Use this theme for your activity in manifest.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColor</item>
        <item name="colorAccent">@color/primaryColor</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:screenOrientation">portrait</item>
    </style>

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@android:color/white</item>
    </style>

    <style name="ToolBarStyle" parent="">
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
        <item name="theme">@style/ThemeOverlay.AppCompat.Light</item>
    </style>

and for above API 21 use this

<style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColor</item>
        <item name="colorAccent">@color/primaryColor</item>
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="android:navigationBarColor">@android:color/black</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:actionMenuTextColor">@android:color/holo_blue_dark</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/black</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:windowContentTransitions">true</item>
        <item name="android:screenOrientation">portrait</item>
    </style>

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@android:color/white</item>
    </style>

    <style name="ToolBarStyle" parent="">
        <item name="android:elevation">@dimen/toolbar_elevation</item>
        <item name="android:transitionName">actionBar</item>
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
        <item name="theme">@style/ThemeOverlay.AppCompat.Light</item>
    </style>

and then in Your MainActivity setup toolbar like below

mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setTitle("Your Title");

and call this method in your onCreate of activity

setupNavigationView();

and here is above method

private void setupNavigationView() {
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);

        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close) {

            @Override
            public void onDrawerClosed(View drawerView) {
                // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank
                super.onDrawerClosed(drawerView);
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank

                super.onDrawerOpened(drawerView);
            }
        };

        //Setting the actionbarToggle to drawer layout
        mDrawerLayout.setDrawerListener(actionBarDrawerToggle);

        //calling sync state is necessay or else your hamburger icon wont show up
        actionBarDrawerToggle.syncState();


    }
like image 45
Shishram Avatar answered Feb 01 '26 16:02

Shishram



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!