导航抽屉汉堡包图标丢失

时间:2015-09-26 07:05:45

标签: android

我这里有一个用于设置导航抽屉的代码。一切正常,除了应该在那里点击并打开抽屉的汉堡图标没有出现。主要活动:

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);
}

}

导航活动:

 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" />

我不知道这里的错误在哪里。我正在使用自定义工具栏这里交叉检查。但没有任何工作。我不知道故障是否真的在这里。请帮助。

3 个答案:

答案 0 :(得分:3)

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

在任何活动中使用上面的代码来放置导航抽屉的图标。您甚至可以在不同的活动中更改它。

使用以下代码 -

 @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();
      }
    }

答案 1 :(得分:1)

将此主题用于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>

并且针对上述API 21使用此

<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>

然后在您的MainActivity设置工具栏中,如下所示

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

并在onCreate活动

中调用此方法
setupNavigationView();

以上是方法

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();


    }

答案 2 :(得分:0)

对不起这一切,我做了一个错误,我做的自定义工具栏,我没有将它作为参数传递给mdrawerToggle.Now它工作正常。