2017-06-05 113 views
0

是否可以对菜单项目执行长按操作以执行特定操作? 当我长按某个项目时,我试图让菜单下拉菜单。长按Android菜单项?

这里的菜单XML

<item 
    android:id="@+id/add_item" 
    android:icon="@drawable/ic_add_black_24dp" 
    android:showAsAction="ifRoom" 
    android:title="Add Item"> 
</item> 

<item 
    android:id="@+id/open_menu" 
    android:icon="@drawable/ic_menu_black_24dp" 
    android:showAsAction="ifRoom|withText" 
    android:title="Open Menu"> 
</item> 

我想有一个下拉菜单出现时,第一项长按

回答

1

您可以HandlerRunnable做到这一点。在run()方法内部,获取您想要的MenuItemView并将onLongClick设置为View

这里是工作代码:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      final View view = findViewById(R.id.add_item); 

      if (view != null) { 
       view.setOnLongClickListener(new View.OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View v) { 

         // Do something... 

         Toast.makeText(getApplicationContext(), "Long pressed", Toast.LENGTH_SHORT).show(); 
         return true; 
        } 
       }); 
      } 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 
} 

OUTPUT:

enter image description here

0

这里是另一个解决你的问题。 我已经在res /菜单/如下menu.xml文件中使用的菜单:

<menu xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/action_send" 
     android:orderInCategory="100" 
     android:title="@string/send_menu" 
     app:showAsAction="always" /> 
</menu> 

这里是我的活动类。我已经为菜单项添加了一个图像按钮并为其设置图像资源。 Backgroud被设置为null以具有透明的菜单项。

public class MyActivity extends AppCompatActivity { 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     MenuItem item = menu.findItem(R.id.action_send); 
     ImageButton imageButton = new ImageButton(this); 
     imageButton.setImageResource(R.drawable.ic_send_white_24dp); 
     imageButton.setBackground(null); 
     item.setActionView(imageButton); 
     item.getActionView().setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       Log.d("Send Button", "Long pressed"); 
       Toast.makeText(MainActivity.this, "Send button long pressed", Toast.LENGTH_LONG).show(); 
       onSendMenuItemLongClick(); 
       return true; 
      } 
     }); 

     item.getActionView().setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onSendMenuItemClick(item); 
      } 
     }); 

     return super.onCreateOptionsMenu(menu); 
    } 

    private void onSendMenuItemLongClick() { 

    } 

    private void onSendMenuItemClick(MenuItem item) { 
     Toast.makeText(this, "Send button clicked", Toast.LENGTH_LONG).show(); 
    } 
}