1

目标

将操作栏的溢出项图标更改为另一种颜色。新图标应通过 svg 输入。

状态

请注意,溢出图标被替换为刷新图标以检查大小差异。稍后它将替换为溢出图标。两个图标都使用相同的方法,使用相同的参数,从相同的 .svg 文件加载
我使用svg-android-2进行 .svg 加载和渲染。 当前状态

修改代码

在解决问题之前,请不要讨论使用此反射代码的危险 :)

// http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/com/android/internal/app/ActionBarImpl.java/
private void hackOverflowIcon() {
    ActionBar actionBar = getActionBar();

    if (actionBar.getClass().getName().equals("com.android.internal.app.ActionBarImpl")) {
        try {
            Field actionBarViewField = actionBar.getClass().getDeclaredField("mActionView");
            actionBarViewField.setAccessible(true);
            Object actionBarView = actionBarViewField.get(actionBar);

            Field actionMenuViewField = actionBarView.getClass().getSuperclass().getDeclaredField("mActionMenuPresenter");
            actionMenuViewField.setAccessible(true);
            Object actionMenu = actionMenuViewField.get(actionBarView);

            Field overFlowViewField = actionMenu.getClass().getDeclaredField("mOverflowButton");
            overFlowViewField.setAccessible(true);
            ImageButton overFlowView = (ImageButton) overFlowViewField.get(actionMenu);

            Drawable drawable=SVGUtils.getDrawableFromRaw(this, R.drawable.refresh, new RectF(0, 0, 120, 120));
            overFlowView.setImageDrawable(drawable);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    } else
        throw new IllegalStateException("Actionbar is an instance of " + actionBar.getClass().getName());
}

问题

为什么图标有不同的大小,如何防止大小变化?

感谢您阅读并在此问题上提供任何帮助,
直到

4

0 回答 0