我有以下
Android Java和XML代码.我想更改我的应用程序的菜单项的字体.我只知道我们可以使用setTypeface更改TextView的字体,但是无法找到菜单项.
JAVA代码:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh1: Toast.makeText(this,"Item1 Selected",Toast.LENGTH_SHORT) .show(); break; case R.id.action_refresh2: Toast.makeText(this,"Item2 Selected",Toast.LENGTH_SHORT) .show(); break; default: break; } }
XML代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_refresh1" android:orderInCategory="100" android:showAsAction="always" android:title="Item1"/> <item android:id="@+id/action_refresh2" android:orderInCategory="100" android:showAsAction="always" android:title="Item2"/> </menu>
解决方法
您必须为菜单项提供自定义布局.
首先,在您的菜单中,XML设置以下之一
如果您正在使用支持库,则为CASE 1:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_save" android:title="@string/action_save" android:icon="@drawable/ic_action_save" android:orderInCategory="100" app:showAsAction="always" app:actionLayout="@layout/layout_menu_save"/> </menu>
如果您没有使用支持库,则为CASE 2:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_save" android:title="@string/action_save" android:icon="@drawable/ic_action_save" android:orderInCategory="100" android:showAsAction="always" android:actionLayout="@layout/layout_menu_save"/> </menu>
然后在actionLayout(我的例子中的layout_menu_save.xml)中写下列内容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@drawable/background_transparent_stateful"> <com.example.YourCustomTypefaceTextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:gravity="center_vertical" android:text="@string/action_save"/> <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:gravity="center_vertical" android:src="@drawable/ic_action_save" android:contentDescription="@string/action_save"/> </LinearLayout>
背景drawable(background_transparent_stateful)对于在您的自定义布局上有触摸反馈很有用:
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="#20FFFFFF"> </item> <item android:drawable="@android:color/transparent"> </item> </selector>
这样,您将在左侧具有带有自定义字体的文本作为右侧图标的标签.
显然,您可以根据自己的需要定制布局
编辑:
如果您正在使用支持库和您的活动主题扩展AppCompatTheme,您可以获得典型的Lollipop“涟漪效应”,以获得更好的触摸反馈.
只需替换自定义背景:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="?attr/selectableItemBackgroundBorderless"> ... </LinearLayout>