更改android操作栏按钮样式

时间:2013-10-24 16:57:50

标签: android button styles android-actionbar

我目前正在改变ActionBar MenuItem上的观点,如下所示:

MenuItem menuItem = menu.add(title);

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

menuItem.setActionView(tv);

然而这禁用了按钮的功能,我假设是因为我改变了ActionView。无论如何我可以保留按钮功能吗?

2 个答案:

答案 0 :(得分:7)

以下是为MenuItem创建自定义ActionBar的示例。

首先:创建将用作View的{​​{1}}。

<强> ActionLayoutExample

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"); } } 的布局。

<强> action_layout_example

MenuItem

包含样式<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并带有图标时,会显示工具提示以指示MenuItem的用途。在您的情况下,您需要采取额外步骤以确保仍可访问此工具提示。

这方面的一个好帮手是Roman Nurik's CheatSheet。你可以在动作布局的构造函数中看到我是如何使用它的。

您明确询问了MenuItem是否可以选择。为此,请确保包含MenuItemandroid:background="?android:attr/selectableItemBackground"属性。

第三次:使用android:clickable="true"属性设置布局,并在android:actionLayoutActivity内正常充实菜单。

<强> your_menu

Fragment

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

MenuItem致电onCreateOptionsMenuMenuItem.getActionView。这是因为不会为自定义View.onClickListener

调用onOptionsItemSelected
View

结果

enter image description here

答案 1 :(得分:0)

试试这个

tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //handle
            }
        });