如何在Android中单击图标时打开侧栏?

Posted

技术标签:

【中文标题】如何在Android中单击图标时打开侧栏?【英文标题】:How to open Side bar on icon click in Android? 【发布时间】:2015-12-04 07:47:12 【问题描述】:

我已经用App toolbar 实现了Hamburger bar,它们都工作正常。以下是toolbarhamburgerbar 的截图:

Hamburger bar

我可以通过滑动打开此栏,但我也想通过单击可绘制图标(右上角图标)将其打开。我该怎么做?

主要活动

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

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

    drawerFragment = (FragmentDrawer)
            getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
    drawerFragment.setDrawerListener(this);
 

 @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.
    int id = item.getItemId();
    return super.onOptionsItemSelected(item);

我认为不需要对layout 文件进行一些更改。我必须在MainActivity 文件中添加什么才能使其成为可能?

我是Android 代码的新手。任何帮助都将不胜感激。

【问题讨论】:

检查这将帮助你***.com/questions/17821532/… 【参考方案1】:

使用工具栏组件应该很容易实现这一点,只需使用与此类似的代码:

    Toolbar toolbar = (Toolbar) findViewById(R.id.home_toolbar);
    toolbar.inflateMenu(R.menu.menu_home);
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() 
        @Override
        public boolean onMenuItemClick(MenuItem item) 
            if (item.getItemId() == R.id.action_settings) 
                mDrawerLayout.openDrawer(Gravity.RIGHT); // where mDrawerLayout is your android.support.v4.widget.DrawerLayout in your activity's xml layout.
            
            return false;
        
    );

编辑:

这里的关键组件是 menu_home.xml 文件,该文件位于您的 res/menu 文件夹中。您可以在那里添加您想要的菜单项,自定义它的图标,甚至更多,在工具栏的右侧添加任意数量的项目(显然在您需要的任何菜单项上处理 openDrawer() 方法 -推荐的一个是最右边的)。

【讨论】:

它将通过单击任意位置的工具栏来打开该栏。对吗? 如果您点击工具栏上的任何位置,它不应该打开抽屉。这是一个非常糟糕的做法和错误的用户体验。只有当您点击汉堡图标时,它才会打开。 但是在上面的代码中你在哪里传递hamburger icon【参考方案2】:

使用openDrawer() 方法。

private DrawerLayout mDrawerLayout;
...
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
...
mDrawerLayout.openDrawer(Gravity.END); // or whatever gravity the of the drawer you want to open

【讨论】:

对不起!我没有得到你。通过单击可绘制图标 (R.drawable.icon_navigation) 将如何帮助我打开栏? 我认为 Gravity.END 更适合他的需求,因为他在右侧使用它。 @SnowClue 在OnClickListener 内部调用openDrawer()【参考方案3】:

使用ActivityonOptionsItemSelected(MenuItem menuItem)方法:

首先,将DrawerLayout 的引用保留在类字段中:

DrawerLayout drawerLayout;

在 onCreate 的某个地方放这个:

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout)

并实现方法:

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) 
    // if you want the default back/home hamburger menu item just put android.R.id.home instead
    if (menuItem.getItemId() == R.drawable.icon_navigation)  
        drawerLayout.openDrawer(GravityCompat.END);
    
    return super.onOptionsItemSelected(menuItem);

【讨论】:

以上是关于如何在Android中单击图标时打开侧栏?的主要内容,如果未能解决你的问题,请参考以下文章

如何从通知或应用程序图标单击 android 知道应用程序打开?

单击图标时如何在 JqGrid 中打开带有 TextArea 的弹出窗口?

单击科尔多瓦中的应用程序图标启动器时如何恢复应用程序?

单击停靠图标时如何打开应用程序窗口?

单击侧栏菜单时应用程序崩溃

如何在 C# 中单击通知图标来聚焦模态对话框?