我正在尝试使用来自 google 的新 api,特别是操作栏。
当build设置为 api 10 时,如果我按下菜单按钮,我会看到漂亮的菜单选项,每个选项都有一个图片和图标。使用 api 14 时,无论我尝试什么,它总是将图标放在操作栏中,没有文字。我已经尝试了我能想到的一切。我给了它“带文本”属性,将文本更改为单个字符(以防它是房间问题),但没有。
我之前已经看到过这样做,甚至在 android.developer 的开发人员指南中,但我似乎无法找到关于如何让它显示的答案。
最佳答案
我怀疑 Android 开发人员有意识地决定永远不要在狭窄的操作栏上显示单个菜单项的文本和图标。但是如果你真的想这样做,你可以使用 android:actionLayout在您的 menu.xml 文件中。 Android ActionBar documentation有更好的解释。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_foo"
android:title="@string/menu_foo"
android:icon="@drawable/ic_menu_foo"
android:showAsAction="always"
android:actionLayout="@layout/action_button_foo" />
</menu>
然后创建你的 action_button_foo.xml
布局:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="14dp"
android:paddingBottom="14dp"
android:gravity="center"
android:text="@string/menu_foo"
android:drawableLeft="@drawable/ic_menu_foo"
android:background="@drawable/bg_btn_action_bar"
android:clickable="true" />
并为其背景使用选择器bg_btn_action_bar.xml
,因此当您点击它时它会改变颜色:
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/bg_action_bar_pressed" />
<item
android:drawable="@color/transparent" />
</selector>
现在您需要让您的自定义 View 处理点击事件。在您的 Activity 中,我喜欢这样做,以便我可以处理 onOptionsItemSelected
中的点击以及所有其他非自定义项目。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
final MenuItem item = menu.findItem(R.id.menu_foo);
item.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onOptionsItemSelected(item);
}
});
return super.onCreateOptionsMenu(menu);
}
关于android 4.0,操作栏上的文字从不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282122/