可以使用以下解决方案之一:
解决方案1:
在您的基础应用程序主题中添加<item name="actionButtonStyle">@style/ActionButtonStyle</item>
,例如:
Solution 2:
Alternatively, you can add app:actionButtonStyle="@style/ActionButtonStyle"
to your Toolbar layout like this:
<style name="ActionButtonStyle" parent="android:Widget.Material.Button">
<item name="android:textColor">@android:color/black</item>
<item name="android:textSize">16sp</item>
<item name="android:background">@drawable/button_background</item>
</style>
并且
按钮背景
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/colorAccent"/>
<item android:state_focused="true"
android:drawable="@color/colorPrimaryDark"/>
<item android:drawable="@color/colorPrimary"/>
</selector>
解决方案2:
使用menuItem.setActionView
将自定义布局应用于您的菜单项,如下所示:
layout_action_cancel(自定义菜单项布局):
最初的回答被涵盖在上述内容中。
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel"
android:id="@+id/b_action_cancel"
android:gravity="center"
android:background="@drawable/button_background">
</Button>
在你的onCreateOptionsMenu方法中,将自定义的布局应用到菜单项中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
LayoutInflater layoutInflater = getLayoutInflater();
View layout = layoutInflater.inflate(R.layout.layout_action_cancel, null, false);
menu.getItem(0).setActionView(layout);
return super.onCreateOptionsMenu(menu);
}
在onPrepareOptionsMenu中设置一个OnClick监听器(替换onOptionsItemSelected)。"Original Answer"翻译成"最初的回答"。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
View layout = menu.getItem(0).getActionView();
if(layout instanceof Button){
Button b_action_cancel = layout.findViewById(R.id.b_action_cancel);
b_action_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
return super.onPrepareOptionsMenu(menu);
}