【问题标题】:Change custom SubMenu background color with Java code使用 Java 代码更改自定义 SubMenu 背景颜色
【发布时间】:2016-12-26 18:16:20
【问题描述】:

在我的家庭活动中,我有一个带有自定义 溢出菜单 的工具栏,我希望它改变颜色以符合工具栏背景颜色(导致工具栏背景颜色可以更改(用户更改为自己喜欢的颜色))...我不知道该怎么做:

这是我的overflow_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/overflow_save_current" app:showAsAction="always" android:title="@string/overflow_save_current" android:icon="@drawable/ic_action_save_light" />
<item android:id="@+id/overflow_settings" app:showAsAction="always" android:title="@string/overflow_settings" android:icon="@drawable/ic_action_settings_light" />
<item android:id="@+id/overflow_overflow" app:showAsAction="always" android:icon="@drawable/ic_action_overflow_light">
    <menu>
        <item android:id="@+id/overflow_feed_back" app:showAsAction="never|withText" android:title="@string/overflow_feed_back" android:icon="@drawable/ic_action_send_now_light" />
        <item android:id="@+id/overflow_about_us" app:showAsAction="never|withText" android:title="@string/overflow_about_us" android:icon="@drawable/ic_action_about_light" />
        <item android:id="@+id/overflow_exit" app:showAsAction="never|withText" android:title="@string/overflow_exit" android:icon="@drawable/ic_action_forward_light" />
    </menu>
</item>

这是OnPrepareOptionsMenu() 方法:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    /* Resources res = getResources();
    item = menu.findItem(R.id.overflow_feed_back);
    SpannableStringBuilder builder = new SpannableStringBuilder("* " + res.getString(R.string.overflow_feed_back));
    builder.setSpan(new ImageSpan(this, android.R.drawable.ic_menu_send), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    item.setTitle(builder); */
    if (!Common.compatible(Common.color, 0xFF000000)) {
        menu.findItem(R.id.overflow_save_current).setIcon(R.drawable.ic_action_save_dark);
        menu.findItem(R.id.overflow_settings).setIcon(R.drawable.ic_action_settings_dark);
        menu.findItem(R.id.overflow_overflow).setIcon(R.drawable.ic_action_overflow_dark);
    } else {
        menu.findItem(R.id.overflow_save_current).setIcon(R.drawable.ic_action_save_light);
        menu.findItem(R.id.overflow_settings).setIcon(R.drawable.ic_action_settings_light);
        menu.findItem(R.id.overflow_overflow).setIcon(R.drawable.ic_action_overflow_light);
    }
    return super.onPrepareOptionsMenu(menu);
}

我已经尝试更改每个元素的背景颜色...但我每次都得到 NPE,menu.findItem(R.id.overflow_about_us).getActionView().setBackgroundColor(Color.BLUE);

希望你能为我找到解决方案,Darkball60

【问题讨论】:

    标签: java android xml nullpointerexception android-menu


    【解决方案1】:

    所以......没有人帮助我......所以我不得不独自工作......几个小时......最终找到解决方案:

    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs)  {
        // Do you own inflater stuff here 
        // Check for menu items (Options menu AKA menu key) 
        if (name.equalsIgnoreCase("android.support.v7.view.menu.ListMenuItemView")) {
            try { 
                // Ask our inflater to create the view 
                final View view = LayoutInflater.from(context).createView(name, null, attrs); 
                // Kind of apply our own background 
                new Handler().post(new Runnable() {
                    public void run() {
                        if (!Common.compatible(Common.color, 0xFF000000)) {
                            try {
                                ((TextView)((RelativeLayout)((ListMenuItemView)view).getChildAt(1)).getChildAt(0)).setTextColor(0xFFFFFFFF);
                            } catch (ClassCastException e) {
    
                            }
                        } else {
                            try {
                                ((TextView)((RelativeLayout)((ListMenuItemView)view).getChildAt(1)).getChildAt(0)).setTextColor(0xFF000000);
                            } catch (ClassCastException e) {
    
                            }
                        }
                        view.setBackgroundColor(Common.color);
                    }
                });
                return view;
            } catch (InflateException e) {
    
            } catch (ClassNotFoundException e) {
    
            }
        }
        return null; 
    }
    

    如果背景是暗的……那么 textColor 是白色的……如果背景是浅的,那么 textColor 是黑色的。

    下面是两个不同工具栏颜色的屏幕:

    希望它对我以外的其他人有所帮助,Darkball60(如果你喜欢这个答案......请随意投票:))

    【讨论】:

    • 没问题。实际上很难弄清楚如何直接在 Java 中做到这一点以便能够动态更改它
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2015-12-06
    • 2021-09-02
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多