简体   繁体   English

如何实现导航抽屉

[英]How to implement Navigation drawer

I am trying to create an app. 我正在尝试创建一个应用。 I am not getting Hamburger Button only back arrow is showing on action bar. 我没有在操作栏上看到汉堡按钮的唯一后退箭头。 How to show Hamburger button show on action bar. 如何在操作栏上显示“汉堡包”按钮。 Using the following code- 使用以下代码-

import android.content.res.Configuration;
import android.os.Bundle;
import android.view.MenuItem;


import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;



public class MainActivity extends FragmentActivity {

ActionBarDrawerToggle mDrawerToggle;
DrawerLayout mDrawer;
TextView messageTextView;
ListView mDrawerListView;

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

    // Get references to the TextView and DrawerLayout
    messageTextView = (TextView) findViewById(R.id.messageTextView);
    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);

    // These lines are needed to display the top-left hamburger button
    mDrawer.setDrawerListener(mDrawerToggle);
    getActionBar().setDisplayShowHomeEnabled(true);
    getActionBar().setDisplayHomeAsUpEnabled(true);

    // Make the hamburger button work
    mDrawerToggle = new ActionBarDrawerToggle(this,mDrawer,R.string.drawer_open,R.string.drawer_close){
        @Override
        public void onDrawerClosed(View drawerView) {
        }

        @Override
        public void onDrawerOpened(View drawerView) {
        }
    };



    // Change the TextView message when ListView item is clicked
    mDrawerListView = (ListView) findViewById(R.id.left_drawer);
    mDrawerListView.setOnItemClickListener(new ListView.OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           messageTextView.setText("Menu Item at position " + position + " clicked.");;
           mDrawer.closeDrawer(GravityCompat.START);
       }
    });
}

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }


    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}


@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

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

} }

How to show Hamburger Button on action bar.I am getting only back arrow on action bar please tell me how to display Hamburger Button on action bar. 如何在操作栏上显示“汉堡包按钮”。我在操作栏上仅获得后退箭头,请告诉我如何在操作栏上显示“汉堡包按钮”。

Thanks 谢谢

error description here 错误说明

Change, 更改,

mDrawerToggle = new ActionBarDrawerToggle(this,mDrawer,R.string.drawer_open,R.string.drawer_close){
        @Override
        public void onDrawerClosed(View drawerView) {
        }

        @Override
        public void onDrawerOpened(View drawerView) {
        }
    };

To, 至,

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer,
                R.drawable.ic_drawer, R.string.app_name) {
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);

            }

            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);

            }
        };

NOTE : You need to keep Icon in drawable folder. 注意:您需要将图标保留在可绘制的文件夹中。 or you can use system's default one. 或者您可以使用系统的默认值。

Happy coding. 快乐的编码。

Initialize your actionBarDrawerToggle in this way : This should work 以这种方式初始化actionBarDrawerToggle:应该可以

ActionBarDrawerToggle toggle;
toggle = new ActionBarDrawerToggle(this, mDrawer, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerClosed(View drawerView) {
            }

            @Override
            public void onDrawerOpened(View drawerView) {
            }

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                toggle.syncState();

            }


        };

You can handle the Home item selection in the MainActivity depending on the state of the DrawerToggle. 您可以根据DrawerToggle的状态在MainActivity中处理Home项目的选择。 This way you don't have to add same code to every fragment. 这样,您不必向每个片段添加相同的代码。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Only handle with DrawerToggle if the drawer indicator is enabled.
        if (mDrawerToggle.isDrawerIndicatorEnabled() &&
                mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action buttons
        switch (item.getItemId()) {
            // Handle home button in non-drawer mode
            case android.R.id.action_settings:
                onBackPressed();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM