首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在抽屉处于打开模式时通过单击ActionBarDrawerToggle更改操作栏菜单图标

如何在抽屉处于打开模式时通过单击ActionBarDrawerToggle更改操作栏菜单图标
EN

Stack Overflow用户
提问于 2014-09-03 14:54:31
回答 1查看 2.6K关注 0票数 0

请找到下面的截图和代码,我想改变“菜单”图标为“关闭”图标时,菜单是打开模式。

当我们点击Screen1中的菜单图标时,我们想要在屏幕左上角显示“关闭”图标,但它不起作用。我如何才能做到这一点?

代码语言:javascript
运行
AI代码解释
复制
public void setUp(int fragmentId, DrawerLayout drawerLayout, final CharSequence mTitle) {
        mFragmentContainerView = getActivity().findViewById(fragmentId);
        mDrawerLayout = drawerLayout;

        final ActionBar actionBar = getActionBar();

//      actionBar.setIcon(R.drawable.ic_launcher);
        actionBar.setTitle("");
        actionBar.setIcon(R.drawable.ic_launcher);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);

        getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
        getActionBar().setDisplayHomeAsUpEnabled(true);
        LayoutInflater mInflater = LayoutInflater.from(getActivity());

        View mCustomView = mInflater.inflate(R.layout.custom_actionbar, null);
        final TextView mTitleTextView = (TextView) mCustomView.findViewById(R.id.title_text);

        mTitleTextView.setText(mTitle);
        ActionBar.LayoutParams params = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
        getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP );
        actionBar.setCustomView(mCustomView, params);
        actionBar.setDisplayShowCustomEnabled(true);

        // ActionBarDrawerToggle ties together the the proper interactions
        // between the navigation drawer and the action bar app icon.
        mDrawerToggle = new ActionBarDrawerToggle(getActivity(),
        mDrawerLayout, /* DrawerLayout object */
        R.drawable.menu_icon, /* nav drawer image to replace 'Up' caret */
        R.string.hello_world,
        R.string.hello_world ) {
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (!isAdded()) {
                    return;
                }
                getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
            }

            @SuppressLint("NewApi")
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (!isAdded()) {
                    return;
                }
                mTitleTextView.setText("");
                if (!mUserLearnedDrawer) {
                    // The user manually opened the drawer; store this flag to
                    // prevent auto-showing
                    // the navigation drawer automatically in the future.
                    mUserLearnedDrawer = true;
                    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
                    sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
                }
                getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
            }
        };

        // If the user hasn't 'learned' about the drawer, open it to introduce
        // them to the drawer,
        // per the navigation drawer design guidelines.
        if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
            mDrawerLayout.openDrawer(mFragmentContainerView);
        }

        // Defer code dependent on restoration of previous instance state.
        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerToggle.syncState();
            }
        });

        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }
EN

回答 1

Stack Overflow用户

发布于 2014-09-03 16:13:59

您可以创建自己的自定义操作栏xml,然后像这样添加它:

代码语言:javascript
运行
AI代码解释
复制
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
getSupportActionBar().setCustomView(R.layout.action_bar);

然后设置一个onClickListener,它可以切换图像可绘制,或者使用选择器可绘制的状态:

代码语言:javascript
运行
AI代码解释
复制
//Use a custom menu button
findViewById(R.id.action_bar_button).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if(mDrawerLayout.isDrawerOpen(Gravity.LEFT)){
            mDrawerLayout.closeDrawers();
            ((ImageView) findViewById(R.id.action_bar_button)).setImageDrawable(getResources().getDrawable(R.drawable.btn_menu_selected));
        }else{
            mDrawerLayout.openDrawer(Gravity.LEFT);
            //Could either set the image drawable
            ((ImageView) findViewById(R.id.action_bar_button)).setImageDrawable(getResources().getDrawable(R.drawable.btn_menu));
            //Or set the image src to a drawable and just change the state:
            //findViewById(R.id.action_bar_button).setSelected(true);
        }
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25647533

复制
相关文章
Android开发(37) 使用DrawerLayout实现抽屉式导航菜单
最近流行 左侧抽屉式的导航条菜单,知乎,360,QQ都使用了这样的导航菜单,我们也了解下:
张云飞Vir
2020/03/16
3.7K0
[flutter专题]6详解AppBar小部件
应用栏是各种应用程序中最常用的组件之一。它可用于容纳搜索字段、以及在页面之间导航的按钮,或者只是页面标题。由于它是一个如此常用的组件,因此 Flutter 为该功能提供了一个名为AppBar的专用小部件。
徐建国
2021/11/30
16.8K0
[flutter专题]6详解AppBar小部件
Android入门教程 | DrawerLayout 侧滑栏
要使用 DrawerLayout,可以在 layout xml 文件中将 DrawerLayout 设置为根视图。
Android_anzi
2021/12/08
2.3K0
2、wxWidgets介绍–菜单栏、状态栏、图标简介
wxWidgets是一个用来编写C++程序的GUI(图形用户界面)工具包。它是一个开源的、成熟的、跨平台的工具包。wxWidgets应用程序能在所有主流的操作系统上运行,Windows,Unix,Mac。这个项目由Julian Smart在1992年启动。wxWidgets提供各种各样的C++类来处理数据流、数据库、多线程、在线帮助、应用程序设置。wxWidgets由大量的窗口小部件组成。
全栈程序员站长
2022/09/06
3.1K0
2、wxWidgets介绍–菜单栏、状态栏、图标简介
Windows 7 操作系统
Windows 7 的主要特性有:  更简单  更安全  更好的连接  更低的成本
青灯古酒
2023/10/16
6270
如何在Mac上轻松更改Finder的外观
macOS Finder是一个方便的实用程序,但是如果您自定义外观,它可能会为您提供更好的服务。这里有一些改变Finder外观的技巧!
office小助手
2020/12/24
6.3K0
如何在Mac上轻松更改Finder的外观
vs code 打开顶部菜单栏和左侧菜单栏的方法
按快捷键 F1 或者 shift+ctrl+p 切换出命令行,然后输入menu 有个view:toggle Menu bar 的功能,即可打开顶部菜单栏
朵朵花儿
2019/09/19
11.7K0
vs code 打开顶部菜单栏和左侧菜单栏的方法
『React Navigation 3x系列教程』createDrawerNavigator开发指南
这篇文章将向大家分享createDrawerNavigator的一些开发指南和实用技巧。
CrazyCodeBoy
2019/12/10
7.3K0
『React Navigation 3x系列教程』createDrawerNavigator开发指南
Parallels Toolbox for mac(pd工具箱)
专为富有创造力的个人、学生、小企业主、长期多任务处理者、IT 经理以及介于两者之间的任何人而设计。Parallels Toolbox 讓每個人都可以充分利用他們的 Mac,而不必學習複雜的系統設定。
Mac小小心
2023/04/10
5.9K0
Parallels Toolbox for mac(pd工具箱)
Android 侧滑抽屉菜单
  滑动菜单相信都不会陌生,你可能见过很多这样的文章,但我的文章会给你不一样的阅读和操作体验。
晨曦_LLW
2021/03/23
4K0
Android 侧滑抽屉菜单
pycharm如何调试代码_pycharm怎么分段运行代码
  (2)已经创建了一个python工程并且添加了内容,具体参考: Getting Started tutorial
全栈程序员站长
2022/09/27
2.3K0
pycharm如何调试代码_pycharm怎么分段运行代码
VsCode中使用Jupyter
(以前称为IPython Notebook)是一个开源项目,可让您轻松地在一个名为Notebook的画布上组合Markdown文本和可执行的Python源代码。
云深无际
2020/11/03
6.2K0
VsCode中使用Jupyter
Windows中的键盘快捷方式大全
Windows有很多键盘快捷方式,使用键盘快捷方式能够大大提高使用windows的效率,同时还能提升自己的逼格,背熟几个快捷方式,操作起来行云流水犹如大神一般!
用户7657330
2020/08/14
5.9K0
点击加载更多

相似问题

打开抽屉时,操作栏图标消失。

22

导航抽屉未打开菜单图标单击工具栏

22

单击菜单图标时未打开导航抽屉

22

单击操作栏图标时的弹出菜单

13

ActionBarDrawerToggle可通过打开抽屉布局点击

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档