Fixed the MainActivity PopupMenu's checkboxes and radio buttons not being tinted with the accent color.
This commit is contained in:
parent
8bdaf08a30
commit
306c676e8b
2 changed files with 48 additions and 35 deletions
|
|
@ -21,9 +21,6 @@ import android.support.v4.view.ViewPager;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.ActionBarDrawerToggle;
|
import android.support.v7.app.ActionBarDrawerToggle;
|
||||||
import android.support.v7.internal.view.menu.MenuPopupHelper;
|
|
||||||
import android.support.v7.widget.ActionMenuPresenter;
|
|
||||||
import android.support.v7.widget.ActionMenuView;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
|
@ -349,12 +346,20 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||||
|
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
|
||||||
|
return super.onPrepareOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
if (drawerToggle.onOptionsItemSelected(item)) {
|
if (drawerToggle.onOptionsItemSelected(item)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
|
||||||
|
|
||||||
if (handleGridSize(item)) return true;
|
if (handleGridSize(item)) return true;
|
||||||
|
|
||||||
int id = item.getItemId();
|
int id = item.getItemId();
|
||||||
|
|
@ -564,37 +569,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
return super.dispatchKeyEvent(event);
|
return super.dispatchKeyEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMenuOpened(int featureId, Menu menu) {
|
|
||||||
toolbar.post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
Field f1 = Toolbar.class.getDeclaredField("mMenuView");
|
|
||||||
f1.setAccessible(true);
|
|
||||||
ActionMenuView actionMenuView = (ActionMenuView) f1.get(toolbar);
|
|
||||||
|
|
||||||
Field f2 = ActionMenuView.class.getDeclaredField("mPresenter");
|
|
||||||
f2.setAccessible(true);
|
|
||||||
ActionMenuPresenter presenter = (ActionMenuPresenter) f2.get(actionMenuView);
|
|
||||||
|
|
||||||
Field f3 = presenter.getClass().getDeclaredField("mOverflowPopup");
|
|
||||||
f3.setAccessible(true);
|
|
||||||
MenuPopupHelper overflowMenuPopupHelper = (MenuPopupHelper) f3.get(presenter);
|
|
||||||
ViewUtil.setCheckBoxTintForMenu(overflowMenuPopupHelper);
|
|
||||||
|
|
||||||
Field f4 = presenter.getClass().getDeclaredField("mActionButtonPopup");
|
|
||||||
f4.setAccessible(true);
|
|
||||||
MenuPopupHelper subMenuPopupHelper = (MenuPopupHelper) f4.get(presenter);
|
|
||||||
ViewUtil.setCheckBoxTintForMenu(subMenuPopupHelper);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return super.onMenuOpened(featureId, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
||||||
if (cab != null && cab.isActive()) cab.finish();
|
if (cab != null && cab.isActive()) cab.finish();
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,11 @@ import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.internal.view.menu.ListMenuItemView;
|
import android.support.v7.internal.view.menu.ListMenuItemView;
|
||||||
import android.support.v7.internal.view.menu.MenuPopupHelper;
|
import android.support.v7.internal.view.menu.MenuPopupHelper;
|
||||||
|
import android.support.v7.widget.ActionMenuPresenter;
|
||||||
|
import android.support.v7.widget.ActionMenuView;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.animation.PathInterpolator;
|
import android.view.animation.PathInterpolator;
|
||||||
|
|
@ -78,7 +83,41 @@ public class ViewUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setCheckBoxTintForMenu(@Nullable MenuPopupHelper menuPopupHelper) {
|
/**
|
||||||
|
* Should be called in {@link android.app.Activity#onPrepareOptionsMenu(Menu)} and {@link android.app.Activity#onOptionsItemSelected(MenuItem)}
|
||||||
|
*
|
||||||
|
* @param toolbar the toolbar to apply the tint on
|
||||||
|
*/
|
||||||
|
public static void invalidateToolbarPopupMenuTint(@NonNull final Toolbar toolbar) {
|
||||||
|
toolbar.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Field f1 = Toolbar.class.getDeclaredField("mMenuView");
|
||||||
|
f1.setAccessible(true);
|
||||||
|
ActionMenuView actionMenuView = (ActionMenuView) f1.get(toolbar);
|
||||||
|
|
||||||
|
Field f2 = ActionMenuView.class.getDeclaredField("mPresenter");
|
||||||
|
f2.setAccessible(true);
|
||||||
|
ActionMenuPresenter presenter = (ActionMenuPresenter) f2.get(actionMenuView);
|
||||||
|
|
||||||
|
Field f3 = presenter.getClass().getDeclaredField("mOverflowPopup");
|
||||||
|
f3.setAccessible(true);
|
||||||
|
MenuPopupHelper overflowMenuPopupHelper = (MenuPopupHelper) f3.get(presenter);
|
||||||
|
ViewUtil.setTintForMenuPopupHelper(overflowMenuPopupHelper);
|
||||||
|
|
||||||
|
Field f4 = presenter.getClass().getDeclaredField("mActionButtonPopup");
|
||||||
|
f4.setAccessible(true);
|
||||||
|
MenuPopupHelper subMenuPopupHelper = (MenuPopupHelper) f4.get(presenter);
|
||||||
|
ViewUtil.setTintForMenuPopupHelper(subMenuPopupHelper);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setTintForMenuPopupHelper(@Nullable MenuPopupHelper menuPopupHelper) {
|
||||||
if (menuPopupHelper != null) {
|
if (menuPopupHelper != null) {
|
||||||
final ListView listView = menuPopupHelper.getPopup().getListView();
|
final ListView listView = menuPopupHelper.getPopup().getListView();
|
||||||
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue