给Toolbar的menu添加图标

废话不多说。直接进入主题。。。。。



今天要实现产品设计的新界面,要使用带Toolbar控件,于是手起刀落,麻溜的一下就写好了:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:background="@color/colorAccent"
    android:layout_height="?attr/actionBarSize"/>

<menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/test_menu1"
        android:icon="@mipmap/mmj"
        app:showAsAction="never"
        android:title="测试1" />
    <item
        android:id="@+id/test_menu2"
        android:icon="@mipmap/mmh"
        app:showAsAction="never"
        android:title="测试2" />
    <item
        android:id="@+id/test_menu3"
        android:icon="@mipmap/mml"
        app:showAsAction="never"
        android:title="测试3" />

</menu>

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//返回按钮监听
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        
    }
});
//menu item点击事件监听
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.test_menu1:

                break;
        }
        return false;
    }
});
setSupportActionBar(toolbar);

在Activity中使用:Activity 需要 extends AppCompatActivity 重写onCreateOptionsMenu方法加载menu布局

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.test_menu,menu);//加载menu布局
    return true;
}



我次热法克,默认情况下Title  和 menu 字体颜色和更多menu图标的颜色都是黑色的。而且menu覆盖了Toolbar

这样menu应该在目前的APP里面没有哪一个是这样的。因为确实体验不好。要怎么去改呢。

于是我就偷偷的去百度了一番发现,首选让menu显示到Toolbar下面这个是一般的APP都这样:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:background="@color/colorAccent"
    app:popupTheme="@style/ToolbarPopupTheme"  -->添加style
    android:layout_height="?attr/actionBarSize"/>

menu 样式,设置背景色和不让menu覆盖Toolbar:

<style name="ToolbarPopupTheme" parent="Widget.AppCompat.Light.PopupMenu.Overflow">
    <item name="android:colorBackground">#90000000</item>  <!-- 设置背景颜色-->
    <item name="overlapAnchor">false</item>  <!--设置不覆盖锚点-->
</style>



已经修改了背景色和覆盖问题。但是Toolbar字体颜色和图标颜色,和menu字体颜色太丑了,产品不满意,然后和产品大干一架之后干不赢,只好回来默默的修改。


绞尽脑汁之后发现在AppTheme添加2行代码就可以搞定了:

<!-- 添加这一句, 即可改变toolbar menu 图标的颜色-->
<item name="android:textColorSecondary">#ffffff</item>
<!--toolbar标题文字颜色-->
<item name="android:textColorPrimary">@android:color/white</item>

然后就出现了下一幕:




哦哟。成功了。颜色都变了。。然后趾高气昂的向产品炫耀自己最新陈果,结果产品又一巴掌拍过来:老子的menu上的图标被狗日了吗?狗日了吗?日了吗?

啊!!!

单身狗的程序员很无奈。。。一向都是我日狗的。怎么能被狗日呢,于是又回来!!!

各种百度各种坑。终于找到了解决方案:

@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
    if (menu != null) {
        if (menu.getClass() == MenuBuilder.class) {
            try {
                Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                m.setAccessible(true);
                m.invoke(menu, true);
            } catch (Exception e) {
                
            }
        }
    }
    return super.onPrepareOptionsPanel(view, menu);
}

搞定。。。




搞定。


图标出来咯诶,喜洋洋诶,啷啋~
挑起键盘啷啷啋,哐啋,找产品诶,罗罗~

啪。。。啪。。。啪。。。


产品:老子的图标示蓝色的,你给老子字体是白色。。。




诶。。。捂着脸。。回到座位。看着电脑屏幕上的AS。。。继续“日狗”

经过各种百度。google,网上给的方案<item name="actionMenuTextColor">@color/text_color</item> ,

但是各种品种的狗都日了一遍,发现修改都失败了。看来只有靠自己,但是发现  <item name="android:textSize">15sp</item>能够修改字体大小成功,于是乎就尝试了一下<item name="android:textColor">@color/color_14b8f4</item>当运行起来的那一刻,我的吉娃娃都飞起来了。。。


<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:background="@color/colorAccent"
    app:popupTheme="@style/ToolbarPopupTheme"
    app:theme="@style/ToolbarTheme"   -->修改主题
    android:layout_height="?attr/actionBarSize"/>

<!-- toolbar菜单样式 -->
<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
    <!-- 修改字体大小 -->
    <item name="android:textSize">15sp</item>
    <!-- 修改字体颜色 -->
    <item name="android:textColor">@color/color_14b8f4</item>
</style>





颜色修改成功了。终于实现了产品那合理(bian tai)的需求。

于是叫来了产品,产品开后很是满意的点了点了,,然后呢。。。窝草。。。他居然不走了。。。,我尼玛




居然闲来无事(dan dan JJ teng)跑来监视我。


哎。没办法谁让别人资格比我老呢。我只是一枚新来的程序员




默默的我有用同样的方法在一个fragment界面里面写了一个Toolbar...我次热法克:

Fragment 里面居然没有 setSupportActionBar(oolbar toolbar)这个方法。。NND。。只好使用我的究极武器了。

((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);  来呀快活呀,反正有大把时光。




吉娃娃快回来--->我的menu呢。吉娃娃一脸二哈的望着我。


setHasOptionsMenu(true);

添加一句代码。一脚踹开 吉娃娃  ,啦啦啦德玛西亚




Fragment的menu出来了。。。但是一回头看到产品猥琐的笑容,在看看手机屏幕 法克 图标不见了。于是准备如法炮制重写  onPrepareOptionsPanel(View view, Menu menu) 



我想静静,别问我静静是谁。。。

经过发现 onCreateOptionsMenu(Menu menu, MenuInflater inflater)这里面不是和 onPrepareOptionsPanel(View view, Menu menu) 一样都有一个menu吗????

灵机一动:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.test_menu,menu);
    if (menu != null) {
        if (menu.getClass() == MenuBuilder.class) {
            try {
                Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                m.setAccessible(true);
                m.invoke(menu, true);
            } catch (Exception e) {
            }
        }
    }
}



哈哈哈哈 ,fragment里面的也出来了







  • 13
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
在 Qt 中,可以使用 QToolBar 类来创建工具栏,并且可以在工具栏中添加下拉菜单。下面是一个简单的示例代码,展示了如何添加一个带有下拉菜单的工具栏: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; QToolBar *toolBar = new QToolBar("My Toolbar", &mainWindow); QAction *action1 = new QAction(QIcon(":/icons/icon1.png"), "Action 1", &mainWindow); QAction *action2 = new QAction(QIcon(":/icons/icon2.png"), "Action 2", &mainWindow); QMenu *menu = new QMenu(&mainWindow); menu->addAction("Menu Item 1"); menu->addAction("Menu Item 2"); QToolButton *dropdownButton = new QToolButton(&mainWindow); dropdownButton->setText("Dropdown"); dropdownButton->setPopupMode(QToolButton::InstantPopup); dropdownButton->setMenu(menu); toolBar->addAction(action1); toolBar->addAction(action2); toolBar->addWidget(dropdownButton); mainWindow.addToolBar(toolBar); mainWindow.show(); return app.exec(); } ``` 在这个示例中,我们创建了一个 `QToolBar` 对象,并将其添加到 `QMainWindow` 中。然后,我们创建了两个 `QAction` 对象,分别代表工具栏上的两个动作。接下来,我们创建了一个 `QMenu` 对象,并向其添加了两个菜单项。然后,我们创建了一个 `QToolButton` 对象,并将其设置为下拉模式,将 `QMenu` 对象设置为其菜单。最后,我们将动作和下拉按钮添加到工具栏中,并将工具栏添加到主窗口中。 你可以根据自己的需求进行修改和扩展,例如更改图标、文本和菜单项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值