目標:
アクションバーのオーバーフロー アイテム アイコンを別の色に変更します。新しいアイコンは svg 経由で入力する必要があります。
州:
サイズの違いを調べるために、オーバーフロー アイコンが更新アイコンに置き換えられていることに注意してください。後でオーバーフロー アイコンに置き換えられます。両方のアイコンは、同じ .svg ファイルから同じパラメーターを使用して同じメソッドを使用して読み込まれます。.svg の読み込みとレンダリング
にはsvg-android-2
を使用します。
改造コード:
問題を解決する前に、この反射コードを使用する危険性について議論しないでください:)
// 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());
}
質問:
アイコンのサイズが異なるのはなぜですか? サイズの変更を防ぐにはどうすればよいですか?
読んでくれてありがとう、そしてこの問題について助けてくれてありがとう、
ティル