Added android.widget.PopupMenu
Change-Id: Id507cf93ebd0484f141a0a44266b883c01aa10db
This commit is contained in:
@@ -220683,6 +220683,105 @@
|
||||
</parameter>
|
||||
</method>
|
||||
</interface>
|
||||
<class name="PopupMenu"
|
||||
extends="java.lang.Object"
|
||||
abstract="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<constructor name="PopupMenu"
|
||||
type="android.widget.PopupMenu"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="context" type="android.content.Context">
|
||||
</parameter>
|
||||
<parameter name="anchor" type="android.view.View">
|
||||
</parameter>
|
||||
</constructor>
|
||||
<method name="dismiss"
|
||||
return="void"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
</method>
|
||||
<method name="getMenu"
|
||||
return="android.view.Menu"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
</method>
|
||||
<method name="getMenuInflater"
|
||||
return="android.view.MenuInflater"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
</method>
|
||||
<method name="setOnMenuItemClickListener"
|
||||
return="void"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="listener" type="android.widget.PopupMenu.OnMenuItemClickListener">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="show"
|
||||
return="void"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
</method>
|
||||
</class>
|
||||
<interface name="PopupMenu.OnMenuItemClickListener"
|
||||
abstract="true"
|
||||
static="true"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<method name="onMenuItemClick"
|
||||
return="boolean"
|
||||
abstract="true"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="item" type="android.view.MenuItem">
|
||||
</parameter>
|
||||
</method>
|
||||
</interface>
|
||||
<class name="PopupWindow"
|
||||
extends="java.lang.Object"
|
||||
abstract="false"
|
||||
|
||||
154
core/java/android/widget/PopupMenu.java
Normal file
154
core/java/android/widget/PopupMenu.java
Normal file
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
* 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 android.widget;
|
||||
|
||||
import com.android.internal.view.menu.MenuBuilder;
|
||||
import com.android.internal.view.menu.MenuPopupHelper;
|
||||
import com.android.internal.view.menu.SubMenuBuilder;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* A PopupMenu displays a {@link Menu} in a modal popup window anchored to a {@link View}.
|
||||
* The popup will appear below the anchor view if there is room, or above it if there is not.
|
||||
* If the IME is visible the popup will not overlap it until it is touched. Touching outside
|
||||
* of the popup will dismiss it.
|
||||
*/
|
||||
public class PopupMenu implements MenuBuilder.Callback {
|
||||
private Context mContext;
|
||||
private MenuBuilder mMenu;
|
||||
private View mAnchor;
|
||||
private MenuPopupHelper mPopup;
|
||||
private OnMenuItemClickListener mMenuItemClickListener;
|
||||
|
||||
/**
|
||||
* Construct a new PopupMenu.
|
||||
*
|
||||
* @param context Context for the PopupMenu.
|
||||
* @param anchor Anchor view for this popup. The popup will appear below the anchor if there
|
||||
* is room, or above it if there is not.
|
||||
*/
|
||||
public PopupMenu(Context context, View anchor) {
|
||||
// TODO Theme?
|
||||
mContext = context;
|
||||
mMenu = new MenuBuilder(context);
|
||||
mMenu.setCallback(this);
|
||||
mAnchor = anchor;
|
||||
mPopup = new MenuPopupHelper(context, mMenu, anchor);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the {@link Menu} associated with this popup. Populate the returned Menu with
|
||||
* items before calling {@link #show()}.
|
||||
*
|
||||
* @see #show()
|
||||
* @see #getMenuInflater()
|
||||
*/
|
||||
public Menu getMenu() {
|
||||
return mMenu;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a {@link MenuInflater} that can be used to inflate menu items from XML into the
|
||||
* menu returned by {@link #getMenu()}.
|
||||
*
|
||||
* @see #getMenu()
|
||||
*/
|
||||
public MenuInflater getMenuInflater() {
|
||||
return new MenuInflater(mContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the menu popup anchored to the view specified during construction.
|
||||
* @see #dismiss()
|
||||
*/
|
||||
public void show() {
|
||||
mPopup.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Dismiss the menu popup.
|
||||
* @see #show()
|
||||
*/
|
||||
public void dismiss() {
|
||||
mPopup.dismiss();
|
||||
}
|
||||
|
||||
public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
|
||||
mMenuItemClickListener = listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
|
||||
if (mMenuItemClickListener != null) {
|
||||
return mMenuItemClickListener.onMenuItemClick(item);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
|
||||
if (!subMenu.hasVisibleItems()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Current menu will be dismissed by the normal helper, submenu will be shown in its place.
|
||||
new MenuPopupHelper(mContext, subMenu, mAnchor).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public void onCloseSubMenu(SubMenuBuilder menu) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public void onMenuModeChange(MenuBuilder menu) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface responsible for receiving menu item click events if the items themselves
|
||||
* do not have individual item click listeners.
|
||||
*/
|
||||
public interface OnMenuItemClickListener {
|
||||
/**
|
||||
* This method will be invoked when a menu item is clicked if the item itself did
|
||||
* not already handle the event.
|
||||
*
|
||||
* @param item {@link MenuItem} that was clicked
|
||||
* @return <code>true</code> if the event was handled, <code>false</code> otherwise.
|
||||
*/
|
||||
public boolean onMenuItemClick(MenuItem item);
|
||||
}
|
||||
}
|
||||
@@ -76,12 +76,14 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
|
||||
mPopup.setAdapter(adapter);
|
||||
mPopup.setModal(true);
|
||||
|
||||
if (mMenu instanceof SubMenuBuilder) {
|
||||
if (mAnchorView != null) {
|
||||
mPopup.setAnchorView(mAnchorView.get());
|
||||
} else if (mMenu instanceof SubMenuBuilder) {
|
||||
SubMenuBuilder subMenu = (SubMenuBuilder) mMenu;
|
||||
final MenuItemImpl itemImpl = (MenuItemImpl) subMenu.getItem();
|
||||
mPopup.setAnchorView(itemImpl.getItemView(MenuBuilder.TYPE_ACTION_BUTTON, null));
|
||||
} else if (mAnchorView != null) {
|
||||
mPopup.setAnchorView(mAnchorView.get());
|
||||
} else {
|
||||
throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
|
||||
}
|
||||
|
||||
mPopup.setContentWidth(Math.min(measureContentWidth(adapter), mPopupMaxWidth));
|
||||
|
||||
Reference in New Issue
Block a user