Loading api/current.xml +13 −0 Original line number Diff line number Diff line Loading @@ -214120,6 +214120,19 @@ <parameter name="d" type="android.graphics.drawable.Drawable"> </parameter> </method> <method name="setContentWidth" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="width" type="int"> </parameter> </method> <method name="setHeight" return="void" abstract="false" core/java/android/widget/ListPopupWindow.java +14 −1 Original line number Diff line number Diff line Loading @@ -431,6 +431,19 @@ public class ListPopupWindow { mDropDownWidth = width; } /** * Sets the width of the popup window by the size of its content. The final width may be * larger to accommodate styled window dressing. * * @param width Desired width of content in pixels. */ public void setContentWidth(int width) { Drawable popupBackground = mPopup.getBackground(); if (popupBackground != null) { mDropDownWidth = popupBackground.getIntrinsicWidth() + width; } } /** * @return The height of the popup window in pixels. */ Loading core/java/com/android/internal/view/menu/MenuBuilder.java +22 −4 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public class MenuBuilder implements Menu { private static final String LOGTAG = "MenuBuilder"; /** The number of different menu types */ public static final int NUM_TYPES = 4; public static final int NUM_TYPES = 5; /** The menu type that represents the icon menu view */ public static final int TYPE_ICON = 0; /** The menu type that represents the expanded menu view */ Loading @@ -66,11 +66,14 @@ public class MenuBuilder implements Menu { * have an ItemView. */ public static final int TYPE_DIALOG = 2; /** * The menu type that represents a button in the application's action bar. */ public static final int TYPE_ACTION_BUTTON = 3; /** * The menu type that represents a menu popup. */ public static final int TYPE_POPUP = 4; private static final String VIEWS_TAG = "android:views"; Loading @@ -80,6 +83,7 @@ public class MenuBuilder implements Menu { com.android.internal.R.style.Theme_ExpandedMenu, 0, 0, 0, }; // Order must be the same order as the TYPE_* Loading @@ -88,6 +92,7 @@ public class MenuBuilder implements Menu { com.android.internal.R.layout.expanded_menu_layout, 0, com.android.internal.R.layout.action_menu_layout, 0, }; // Order must be the same order as the TYPE_* Loading @@ -96,6 +101,7 @@ public class MenuBuilder implements Menu { com.android.internal.R.layout.list_menu_item_layout, com.android.internal.R.layout.list_menu_item_layout, com.android.internal.R.layout.action_menu_item_layout, com.android.internal.R.layout.list_menu_item_layout, }; private static final int[] sCategoryToOrder = new int[] { Loading Loading @@ -1251,7 +1257,19 @@ public class MenuBuilder implements Menu { } public View getView(int position, View convertView, ViewGroup parent) { return ((MenuItemImpl) getItem(position)).getItemView(mMenuType, parent); if (convertView != null) { MenuView.ItemView itemView = (MenuView.ItemView) convertView; itemView.getItemData().setItemView(mMenuType, null); MenuItemImpl item = (MenuItemImpl) getItem(position); itemView.initialize(item, mMenuType); item.setItemView(mMenuType, itemView); return convertView; } else { MenuItemImpl item = (MenuItemImpl) getItem(position); item.setItemView(mMenuType, null); return item.getItemView(mMenuType, parent); } } } Loading core/java/com/android/internal/view/menu/MenuItemImpl.java +8 −1 Original line number Diff line number Diff line Loading @@ -583,6 +583,10 @@ public final class MenuItemImpl implements MenuItem { return (View) mItemViews[menuType].get(); } void setItemView(int menuType, ItemView view) { mItemViews[menuType] = new WeakReference<ItemView>(view); } /** * Create and initializes a menu item view that implements {@link MenuView.ItemView}. * @param menuType The type of menu to get a View for (must be one of Loading Loading @@ -631,7 +635,10 @@ public final class MenuItemImpl implements MenuItem { * @return Whether the given menu type should show icons for menu items. */ public boolean shouldShowIcon(int menuType) { return menuType == MenuBuilder.TYPE_ICON || mMenu.getOptionalIconsVisible(); return menuType == MenuBuilder.TYPE_ICON || menuType == MenuBuilder.TYPE_ACTION_BUTTON || menuType == MenuBuilder.TYPE_POPUP || mMenu.getOptionalIconsVisible(); } public boolean isActionButton() { Loading core/java/com/android/internal/view/menu/MenuPopupHelper.java 0 → 100644 +91 −0 Original line number Diff line number Diff line /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.view.menu; import com.android.internal.view.menu.MenuBuilder.MenuAdapter; import android.content.Context; import android.util.DisplayMetrics; import android.view.View; import android.view.View.MeasureSpec; import android.widget.AdapterView; import android.widget.ListPopupWindow; /** * @hide */ public class MenuPopupHelper implements AdapterView.OnItemClickListener { private static final String TAG = "MenuPopupHelper"; private Context mContext; private ListPopupWindow mPopup; private SubMenuBuilder mSubMenu; private int mPopupMaxWidth; public MenuPopupHelper(Context context, SubMenuBuilder subMenu) { mContext = context; mSubMenu = subMenu; final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mPopupMaxWidth = metrics.widthPixels / 2; } public void show() { // TODO Use a style from the theme here mPopup = new ListPopupWindow(mContext, null, 0, com.android.internal.R.style.Widget_Spinner); mPopup.setOnItemClickListener(this); final MenuAdapter adapter = mSubMenu.getMenuAdapter(MenuBuilder.TYPE_POPUP); mPopup.setAdapter(adapter); mPopup.setModal(true); final MenuItemImpl itemImpl = (MenuItemImpl) mSubMenu.getItem(); final View anchorView = itemImpl.getItemView(MenuBuilder.TYPE_ACTION_BUTTON, null); mPopup.setAnchorView(anchorView); mPopup.setContentWidth(Math.min(measureContentWidth(adapter), mPopupMaxWidth)); mPopup.show(); } public void dismiss() { mPopup.dismiss(); mPopup = null; } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mSubMenu.performItemAction(mSubMenu.getItem(position), 0); mPopup.dismiss(); } private int measureContentWidth(MenuAdapter adapter) { // Menus don't tend to be long, so this is more sane than it looks. int width = 0; View itemView = null; final int widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); final int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); final int count = adapter.getCount(); for (int i = 0; i < count; i++) { itemView = adapter.getView(i, itemView, null); itemView.measure(widthMeasureSpec, heightMeasureSpec); width = Math.max(width, itemView.getMeasuredWidth()); } return width; } } Loading
api/current.xml +13 −0 Original line number Diff line number Diff line Loading @@ -214120,6 +214120,19 @@ <parameter name="d" type="android.graphics.drawable.Drawable"> </parameter> </method> <method name="setContentWidth" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="width" type="int"> </parameter> </method> <method name="setHeight" return="void" abstract="false"
core/java/android/widget/ListPopupWindow.java +14 −1 Original line number Diff line number Diff line Loading @@ -431,6 +431,19 @@ public class ListPopupWindow { mDropDownWidth = width; } /** * Sets the width of the popup window by the size of its content. The final width may be * larger to accommodate styled window dressing. * * @param width Desired width of content in pixels. */ public void setContentWidth(int width) { Drawable popupBackground = mPopup.getBackground(); if (popupBackground != null) { mDropDownWidth = popupBackground.getIntrinsicWidth() + width; } } /** * @return The height of the popup window in pixels. */ Loading
core/java/com/android/internal/view/menu/MenuBuilder.java +22 −4 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public class MenuBuilder implements Menu { private static final String LOGTAG = "MenuBuilder"; /** The number of different menu types */ public static final int NUM_TYPES = 4; public static final int NUM_TYPES = 5; /** The menu type that represents the icon menu view */ public static final int TYPE_ICON = 0; /** The menu type that represents the expanded menu view */ Loading @@ -66,11 +66,14 @@ public class MenuBuilder implements Menu { * have an ItemView. */ public static final int TYPE_DIALOG = 2; /** * The menu type that represents a button in the application's action bar. */ public static final int TYPE_ACTION_BUTTON = 3; /** * The menu type that represents a menu popup. */ public static final int TYPE_POPUP = 4; private static final String VIEWS_TAG = "android:views"; Loading @@ -80,6 +83,7 @@ public class MenuBuilder implements Menu { com.android.internal.R.style.Theme_ExpandedMenu, 0, 0, 0, }; // Order must be the same order as the TYPE_* Loading @@ -88,6 +92,7 @@ public class MenuBuilder implements Menu { com.android.internal.R.layout.expanded_menu_layout, 0, com.android.internal.R.layout.action_menu_layout, 0, }; // Order must be the same order as the TYPE_* Loading @@ -96,6 +101,7 @@ public class MenuBuilder implements Menu { com.android.internal.R.layout.list_menu_item_layout, com.android.internal.R.layout.list_menu_item_layout, com.android.internal.R.layout.action_menu_item_layout, com.android.internal.R.layout.list_menu_item_layout, }; private static final int[] sCategoryToOrder = new int[] { Loading Loading @@ -1251,7 +1257,19 @@ public class MenuBuilder implements Menu { } public View getView(int position, View convertView, ViewGroup parent) { return ((MenuItemImpl) getItem(position)).getItemView(mMenuType, parent); if (convertView != null) { MenuView.ItemView itemView = (MenuView.ItemView) convertView; itemView.getItemData().setItemView(mMenuType, null); MenuItemImpl item = (MenuItemImpl) getItem(position); itemView.initialize(item, mMenuType); item.setItemView(mMenuType, itemView); return convertView; } else { MenuItemImpl item = (MenuItemImpl) getItem(position); item.setItemView(mMenuType, null); return item.getItemView(mMenuType, parent); } } } Loading
core/java/com/android/internal/view/menu/MenuItemImpl.java +8 −1 Original line number Diff line number Diff line Loading @@ -583,6 +583,10 @@ public final class MenuItemImpl implements MenuItem { return (View) mItemViews[menuType].get(); } void setItemView(int menuType, ItemView view) { mItemViews[menuType] = new WeakReference<ItemView>(view); } /** * Create and initializes a menu item view that implements {@link MenuView.ItemView}. * @param menuType The type of menu to get a View for (must be one of Loading Loading @@ -631,7 +635,10 @@ public final class MenuItemImpl implements MenuItem { * @return Whether the given menu type should show icons for menu items. */ public boolean shouldShowIcon(int menuType) { return menuType == MenuBuilder.TYPE_ICON || mMenu.getOptionalIconsVisible(); return menuType == MenuBuilder.TYPE_ICON || menuType == MenuBuilder.TYPE_ACTION_BUTTON || menuType == MenuBuilder.TYPE_POPUP || mMenu.getOptionalIconsVisible(); } public boolean isActionButton() { Loading
core/java/com/android/internal/view/menu/MenuPopupHelper.java 0 → 100644 +91 −0 Original line number Diff line number Diff line /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.view.menu; import com.android.internal.view.menu.MenuBuilder.MenuAdapter; import android.content.Context; import android.util.DisplayMetrics; import android.view.View; import android.view.View.MeasureSpec; import android.widget.AdapterView; import android.widget.ListPopupWindow; /** * @hide */ public class MenuPopupHelper implements AdapterView.OnItemClickListener { private static final String TAG = "MenuPopupHelper"; private Context mContext; private ListPopupWindow mPopup; private SubMenuBuilder mSubMenu; private int mPopupMaxWidth; public MenuPopupHelper(Context context, SubMenuBuilder subMenu) { mContext = context; mSubMenu = subMenu; final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mPopupMaxWidth = metrics.widthPixels / 2; } public void show() { // TODO Use a style from the theme here mPopup = new ListPopupWindow(mContext, null, 0, com.android.internal.R.style.Widget_Spinner); mPopup.setOnItemClickListener(this); final MenuAdapter adapter = mSubMenu.getMenuAdapter(MenuBuilder.TYPE_POPUP); mPopup.setAdapter(adapter); mPopup.setModal(true); final MenuItemImpl itemImpl = (MenuItemImpl) mSubMenu.getItem(); final View anchorView = itemImpl.getItemView(MenuBuilder.TYPE_ACTION_BUTTON, null); mPopup.setAnchorView(anchorView); mPopup.setContentWidth(Math.min(measureContentWidth(adapter), mPopupMaxWidth)); mPopup.show(); } public void dismiss() { mPopup.dismiss(); mPopup = null; } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mSubMenu.performItemAction(mSubMenu.getItem(position), 0); mPopup.dismiss(); } private int measureContentWidth(MenuAdapter adapter) { // Menus don't tend to be long, so this is more sane than it looks. int width = 0; View itemView = null; final int widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); final int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); final int count = adapter.getCount(); for (int i = 0; i < count; i++) { itemView = adapter.getView(i, itemView, null); itemView.measure(widthMeasureSpec, heightMeasureSpec); width = Math.max(width, itemView.getMeasuredWidth()); } return width; } }