目标:
将操作栏的溢出项图标更改为另一种颜色。新图标应通过 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());
}
问题:
为什么图标有不同的大小,如何防止大小变化?
感谢您阅读并在此问题上提供任何帮助,
直到