package de.blau.android.util; import android.app.Activity; import android.content.Context; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.ActionMenuView; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.widget.FrameLayout; import de.blau.android.App; import de.blau.android.R; public class MenuUtil { private static String DEBUG_TAG = MenuUtil.class.getName(); private static int MIN_WIDTH_DP = 64; // this is hardwired in ActionMenuView!!! private int maxItems = 0; private final int screenWidth; public MenuUtil(Context ctx) { // hardcoded calculation of how many icons we want to display //TODO de-hardcode DisplayMetrics metrics = App.resources().getDisplayMetrics(); screenWidth = metrics.widthPixels; float widthDp = metrics.widthPixels / metrics.density; maxItems = (int) (widthDp/MIN_WIDTH_DP); Log.d(DEBUG_TAG,"pixel width " + metrics.widthPixels + " DP width " + widthDp + " maxItems " + maxItems); } public void reset() { } public void setShowAlways(Menu menu) { int nonVisibleItems = 0; for (int i=0;i < menu.size();i++) { MenuItem mi = menu.getItem(i); if (!mi.isVisible() || mi.getIcon() == null) { nonVisibleItems++; } } int tempMaxItems = maxItems; if ((menu.size() - nonVisibleItems) > maxItems) { // will have overflow menu tempMaxItems--; } // Log.d("MenuUtil","menu size " + menu.size() + " maxItems " + maxItems + " nonVisible " + nonVisibleItems); for (int i=0,j=0;i < menu.size();i++) { // max 10 even if we have more space MenuItem mi = menu.getItem(i); // Log.d("MenuUtil","menu " + mi.getTitle()); if (j < Math.min(tempMaxItems,10)) { if (mi.isVisible() && mi.getIcon() != null) { MenuItemCompat.setShowAsAction(menu.getItem(i),MenuItemCompat.SHOW_AS_ACTION_ALWAYS); j++; } } else { MenuItemCompat.setShowAsAction(menu.getItem(i),MenuItemCompat.SHOW_AS_ACTION_NEVER); } } } public static void setupBottomBar(Activity activity, ActionMenuView bar, boolean fullScreen, boolean light) { FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); if (Util.isLarge(activity)) { params.width = FrameLayout.LayoutParams.WRAP_CONTENT; params.gravity = Gravity.END; } bar.setLayoutParams(params); if (fullScreen) { if (light) { bar.setPopupTheme(R.style.Theme_noOverlapMenu_Light); } else { bar.setPopupTheme(R.style.Theme_noOverlapMenu); } } } }