всплывающее меню развернуть / свернуть с помощью значка на панели действий - PullRequest
4 голосов
/ 14 февраля 2012

Я занимаюсь разработкой приложения 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).

Я хотел бы реализовать функцию, которая, когда пользователь нажимает пальцем на значок изображения, под значком раскрывается всплывающее меню, а при повторном нажатии значка всплывающее меню сворачивается.Как это реализовать?

Ответы [ 2 ]

2 голосов
/ 15 марта 2013

в вашем imageView onClickListener создайте это всплывающее окно и поместите его под 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);
           }
     });

, это поместит ваше всплывающее окно под ваше изображение / кнопку

2 голосов
/ 12 апреля 2012

добавить переменные:

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

});
...