繁体   English   中英

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" />

现在我遇到了可选背景的问题,背景仍然是操作图标的大小:

看起来如何

如何设置操作栏以应用填充整个项目框的可选背景?

它看起来像什么

您可以尝试在styles设置android:actionBarItemBackground属性,如下所示:

<style name="AppTheme" parent="android:Theme.Material">
    ...
    <item name="android:actionBarItemBackground">?android:selectableItemBackground</item>
</style>

使用以下解决方案之一:

解决方案1:

<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>

解决方案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)

@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);
    }

您可以尝试在菜单项属性中以选定状态和正常状态应用可绘制对象:

<item
    android:id="@+id/action_cancel"
    android:showAsAction="always|withText"
    android:title="@string/action_cancel" 
    android:icon="@drawable/mybuttonbackground" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM