我目前正在改变ActionBar
MenuItem
上的观点,如下所示:
MenuItem menuItem = menu.add(title);
TextView tv = new TextView(context);
tv.setTypeface(myTypeface);
tv.setText("hello");
menuItem.setActionView(tv);
然而这禁用了按钮的功能,我假设是因为我改变了ActionView
。无论如何我可以保留按钮功能吗?
答案 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
是否可以选择。为此,请确保包含MenuItem
和android:background="?android:attr/selectableItemBackground"
属性。
第三次:使用android:clickable="true"
属性设置布局,并在android:actionLayout
或Activity
内正常充实菜单。
<强> your_menu 强>
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
结果
答案 1 :(得分:0)
试试这个
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//handle
}
});