问题
I am developing Android 2.1 API 7 app. I implement my Action Bar with ActionbarSherlock library.
My action bar view:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/my_option"
android:layout_gravity="left"
android:src="@drawable/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
</LinearLayout>
In my Activity onCreate()
callback:
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
ActionBar actionBar = getSupportActionBar();
View actionBarView = getLayoutInflater().inflate(R.layout.action_bar, null);
actionBar.setCustomView(actionBarView);
ImageView actionBarImg = (ImageView) actionBarView.findViewById(R.id.my_option);
actionBarImg.setOnClickListener(new OnClickListener(){
public void onClick(View view) {
//how to pop up a menu which is expand/collapse below the image icon
}
});
}
As you see above, there is a image icon (actionBarImg
) on the action bar layout.
I would like to implement the feature that, when user finger press the image icon, a popup menu will expand below the icon, when press icon again, the popup menu collapses. How to implement this?
回答1:
add variables:
private PopupWindow mPopupMenu;
private View mMenuLayout;
private boolean isPopupOpened = false;
add to onCreate():
mMenuLayout = getLayoutInflater().inflate(R.layout.menu_layout, null);
mPopupMenu = new PopupWindow(mMenuLayout, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
actionBarImg.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if (isPopupOpened)
{
mPopupMenu.dismiss();
isPopupOpened = false;
}
else
{
mPopupMenu.showAsDropDown(actionBarImg);
isPopupOpened = true;
}
}
});
回答2:
in your imageView onClickListener create this popupWindow and put it under the imageView
actionBarImg.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.cart_layout, null);
PopupWindow pw = new PopupWindow(layout , LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT, true);
// display the popup in the center
pw.setOutsideTouchable(true);
pw.setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
pw.setFocusable(true);
pw.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("touch ", "touch");
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
Log.i("touch outside", "touch outside");
pw.dismiss();
return true;
}
return false;
}
});
pw.showAsDropDown(v);
}
});
this will place your popupWindow under your imageView/button
来源:https://stackoverflow.com/questions/9274862/popup-menu-expand-collapse-from-an-icon-in-action-bar