下面是一个MenuItem
为ActionBar
.
第一:创建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
属性来设置您的布局并在您的Activity
or中正常扩展菜单Fragment
。
你的菜单
<item
android:id="@+id/action_typeface"
android:actionLayout="@layout/action_layout_example"
android:showAsAction="ifRoom"
android:title="@string/hello_world"/>
使用MenuItem
在onCreateOptionsMenu
通话MenuItem.getActionView
中View.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
}
});
结果