带有ActionView for Clickevent的操作栏没有响应

时间:2013-04-26 12:05:11

标签: android android-layout android-actionbar

我想要一个弹出式下拉菜单,其中的图标是从操作栏中的按钮打开的(costumized overflow菜单)。 因此,我为MenuItem ActionView添加OnClickListener,并在其View下打开弹出窗口作为下拉菜单。

  @Override
        public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);

        MenuItem item = menu.findItem(R.id.action_settings);
        item.setActionView(R.layout.menu_overflow);
        item.expandActionView();

        final View vs = (View) menu.findItem(R.id.action_settings).getActionView();
        vs.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                showPopup(MainActivity.this, vs);
            }
        });
        return true;
    }

menu_overflow.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:clickable="true"
    >

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
         />

menu.xml文件

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:icon="@drawable/ic_launcher"
    />

acton栏中的按钮没有响应。

当我在xml中声明动作视图时,按钮会响应,但不会显示图标。像这样举例如:

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:icon="@drawable/ic_launcher"
    android:actionViewClass="android.widget.ImageButton"
    />

3 个答案:

答案 0 :(得分:0)

尝试在menu_overflow.xml中只使用ImageButton,

<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher"
     />

然后将布局膨胀为ImageButton并将其传递给actionview。使用ImageView,向其添加一个onclick监听器。

ImageButton iv = (ImageButton) inflater.inflate(R.layout.menu_overflow, null);

iv.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick(View v) {
         //TODO ADD CODE                    
     }              
 });

答案 1 :(得分:0)

其他选项是让您的LinearLayout通过不使用ImageButton处理它来处理点击(并且您可以保留ViewGroup):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:clickable="true"
    >
    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:clickable="false"
     />

答案 2 :(得分:0)

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    selectedMenuItem = menu.findItem(R.id.action_cart);
    View actionView=selectedMenuItem.getActionView();

    if(actionView!=null) {
        countTvMenuItem=actionView.findViewById(R.id.count_tv);
        countImageViewMenuItem=actionView.findViewById(R.id.cart_ic_image);
    }

    countImageViewMenuItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mIntent = new Intent(HomePage.this, CartPage.class);
            startActivity(mIntent);
        }
    });.