安卓操作栏选项菜单项自定义可选择背景

10

我正在尝试使用默认的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" />
现在我遇到了可选择背景的问题,它仍然是动作图标的大小: How it looks like 我该如何设置操作栏以应用可选择的背景,使其填满项目的整个框? How it should look like
3个回答

4
您可以尝试在样式中设置android:actionBarItemBackground属性,方法如下:
<style name="AppTheme" parent="android:Theme.Material">
    ...
    <item name="android:actionBarItemBackground">?android:selectableItemBackground</item>
</style>

2

可以使用以下解决方案之一:

解决方案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) {
                    //your code
                }
            });
        }
        return super.onPrepareOptionsMenu(menu);
    }

我猜这会起作用。在这一端看起来很好。但是我真的不想为了一个菜单项而进行太多配置。我认为可能没有太大的麻烦,只需要一些主题属性就可以了。 - tynn

1
你可以尝试在菜单项属性中应用具有选定和正常状态的可绘制对象:
<item
    android:id="@+id/action_cancel"
    android:showAsAction="always|withText"
    android:title="@string/action_cancel" 
    android:icon="@drawable/mybuttonbackground" />

icon 将替换文本或显示在其开头。文本或其背景不受影响。所以很遗憾,这对我不起作用。 - tynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接