Android 操作栏选项菜单项自定义可选背景
Android action bar options menu item custom selectable background
我正在尝试将默认 android 操作栏与自定义视图一起使用:
<style name="ActionBar" parent="android:Widget.Material.ActionBar.Solid">
<item name="android:displayOptions">showCustom</item>
<item name="android:customNavigationLayout">@layout/customNavigationLayout</item>
</style>
选项菜单包含一个应始终显示文本的项目:
<item
android:id="@+id/action_cancel"
android:showAsAction="always|withText"
android:title="@string/action_cancel" />
现在我遇到了可选背景的问题,它仍然是动作图标的大小:
如何设置操作栏以应用可选背景来填充整个项目框?
您可以尝试在菜单项 属性 处应用选中状态和正常状态的可绘制对象:
<item
android:id="@+id/action_cancel"
android:showAsAction="always|withText"
android:title="@string/action_cancel"
android:icon="@drawable/mybuttonbackground" />
使用以下解决方案之一:
解决方案一:
将 <item name="actionButtonStyle">@style/ActionButtonStyle</item>
添加到您的基本应用程序主题中,例如:
<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>
和
button_background
<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>
方案二:
使用 menuItem.setActionView
将自定义布局应用到您的菜单项,如下所示:
layout_action_cancel (custom menu item layout):
<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>
Then in your onCreateOptionsMenu apply the custom Layout to the menu
item:
@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);
}
and in onPrepareOptionsMenu set an OnClick Listener (replacing the
onOptionsItemSelected)
@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) {
//your code
}
});
}
return super.onPrepareOptionsMenu(menu);
}
您可以尝试在 styles
中设置 android:actionBarItemBackground
属性,如下所示:
<style name="AppTheme" parent="android:Theme.Material">
...
<item name="android:actionBarItemBackground">?android:selectableItemBackground</item>
</style>
我正在尝试将默认 android 操作栏与自定义视图一起使用:
<style name="ActionBar" parent="android:Widget.Material.ActionBar.Solid">
<item name="android:displayOptions">showCustom</item>
<item name="android:customNavigationLayout">@layout/customNavigationLayout</item>
</style>
选项菜单包含一个应始终显示文本的项目:
<item
android:id="@+id/action_cancel"
android:showAsAction="always|withText"
android:title="@string/action_cancel" />
现在我遇到了可选背景的问题,它仍然是动作图标的大小:
如何设置操作栏以应用可选背景来填充整个项目框?
您可以尝试在菜单项 属性 处应用选中状态和正常状态的可绘制对象:
<item
android:id="@+id/action_cancel"
android:showAsAction="always|withText"
android:title="@string/action_cancel"
android:icon="@drawable/mybuttonbackground" />
使用以下解决方案之一:
解决方案一:
将 <item name="actionButtonStyle">@style/ActionButtonStyle</item>
添加到您的基本应用程序主题中,例如:
<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>
和
button_background
<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>
方案二:
使用 menuItem.setActionView
将自定义布局应用到您的菜单项,如下所示:
layout_action_cancel (custom menu item layout):
<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>
Then in your onCreateOptionsMenu apply the custom Layout to the menu item:
@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);
}
and in onPrepareOptionsMenu set an OnClick Listener (replacing the onOptionsItemSelected)
@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) {
//your code
}
});
}
return super.onPrepareOptionsMenu(menu);
}
您可以尝试在 styles
中设置 android:actionBarItemBackground
属性,如下所示:
<style name="AppTheme" parent="android:Theme.Material">
...
<item name="android:actionBarItemBackground">?android:selectableItemBackground</item>
</style>