2012-02-14 70 views
4

我正在开发Android 2.1 API 7应用程序。我用ActionbarSherlock库实施我的Action Bar。弹出式菜单从操作栏中的图标展开/折叠

我动作条的看法:

<?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> 

在我的活动onCreate()回调:

@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       
       } 
     }); 
    } 

正如你看到的上面,对操作栏布局的图像图标(actionBarImg)。

我想实现的功能是,当用户手指按下图像图标时,弹出菜单将展开在图标下方,再次按图标时,弹出菜单会折叠。如何实现这一点?

回答

2

添加变量:

private PopupWindow mPopupMenu; 
private View mMenuLayout; 
private boolean isPopupOpened = false; 

增加的onCreate():在您的ImageView

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; 
     }       
    } 

}); 
+0

mPopupMenu.showAsDropDown(tv);这里的电视是什么 – darsh 2012-05-07 10:26:43

+0

哦,我的错误,应该是'actionBarImg' – candyleung 2012-05-08 01:43:21

2

onClickListener创建这个popupWindow,并把它的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); 
      } 
    }); 

这将放置你的popupWindow下imageView /按钮