【问题标题】:popup menu expand/collapse from an icon in Action Bar弹出菜单从操作栏中的图标展开/折叠
【发布时间】:2012-03-05 16:50:04
【问题描述】:

我正在开发 Android 2.1 API 7 应用程序。我使用 ActionbarSherlock 库实现了我的操作栏。

我的操作栏视图:

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

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

【问题讨论】:

    标签: android android-layout android-intent android-emulator


    【解决方案1】:

    添加变量:

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

    添加到 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;
            }                        
        }
    
    });
    

    【讨论】:

    • 哦,我的错,应该是actionBarImg
    【解决方案2】:

    在你的 imageView 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/button 下

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多