0

我目前正在改变我的看法ActionBar MenuItem

MenuItem menuItem = menu.add(title);

TextView tv = new TextView(context);
tv.setTypeface(myTypeface);
tv.setText("hello");

menuItem.setActionView(tv);

但是,这禁用了按钮的功能,我假设这是因为我更改了ActionView. 无论如何我可以在保留按钮功能的同时做到这一点吗?

4

2 回答 2

7

下面是一个MenuItemActionBar.

第一:创建View将作为您的MenuItem.

动作布局示例

/**
 * A {@link RelativeLayout} that serves as a custom {@link MenuItem}
 */
public class ActionLayoutExample extends RelativeLayout {

    /** The MenuItem */
    private TextView mHello;

    /**
     * Constructor for <code>ActionLayoutExample</code>
     * 
     * @param context The {@link Context} to use
     * @param attrs The attributes of the XML tag that is inflating the view
     */
    public ActionLayoutExample(Context context, AttributeSet attrs) {
        super(context, attrs);
        // Ensure the MenuItem is accessible
        CheatSheet.setup(this);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        // Initialize the TextView
        mHello = (TextView) findViewById(android.R.id.text1);
        mHello.setTypeface(myTypeface);
        mHello.setText("Hello");
    }

}

第二:创建您将实际应用于MenuItem.

action_layout_example

<your.package.name.ActionLayoutExample xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/actionButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:contentDescription="@string/hello_world" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</your.package.name.ActionLayoutExample>

包含样式style="?android:attr/actionButtonStyle"以确保布局正确反映ActionBar项目非常重要。android:contentDescription在布局中包含 a 也很重要。通常,当您长按MenuItem带有图标的 a 时,会显示一个工具提示以指示MenuItem用途。在您的情况下,您需要采取额外的步骤来确保仍然可以访问此工具提示。

一个很好的帮手是Roman Nurik 的 CheatSheet。您可以在操作布局的构造函数中看到我是如何使用它的。

您特别询问了MenuItem可选择的问题。为此,请确保包含android:background="?android:attr/selectableItemBackground"android:clickable="true"属性。

第三:使用该android:actionLayout属性来设置您的布局并在您的Activityor中正常扩展菜单Fragment

你的菜单

<item
    android:id="@+id/action_typeface"
    android:actionLayout="@layout/action_layout_example"
    android:showAsAction="ifRoom"
    android:title="@string/hello_world"/>

使用MenuItem

onCreateOptionsMenu通话MenuItem.getActionViewView.onClickListener。这是因为onOptionsItemSelected不会为自定义调用View

final View example = menu.findItem(R.id.action_typeface).getActionView();
example .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do something
    }
});

结果

在此处输入图像描述

于 2013-10-24T17:50:15.353 回答
0

尝试这个

tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //handle
            }
        });
于 2013-10-24T17:27:33.810 回答