0

我想要一个弹出下拉菜单,其中包含从操作栏中的按钮打开的图标(定制的溢出菜单)。因此我给了我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"
         />

菜单.xml

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

动作栏中的按钮没有响应。

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

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

4

3 回答 3

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                    
     }              
 });
于 2013-09-24T08:27:40.123 回答
0

其他选项是让您的 LinearLayout 通过不使用 ImageButton 处理点击来处理点击(并且您可以保留 out 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"
     />
于 2014-01-14T16:18:42.480 回答
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);
        }
    });.   
于 2017-11-25T23:34:51.723 回答