我正在创建一个应用程序,其中我有三个项目在行动栏。我想当我点击其中一个项目时,它应该被突出显示。
我浏览了一些可用的示例,但得出的结论是,我必须使用
动作条样式生成器工具。
我引用了下面的链接。但不满意
how to highlight a menu item on selection?
这是唯一的办法吗?

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarItemBackground">@drawable/action_bar_item_selector</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

选择XML
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:state_focused="true"
    android:drawable="@drawable/ic_action_blue" />
  <item android:state_pressed="true"
    android:drawable="@drawable/ic_action_green" />
  <item android:drawable="@android:color/transparent" />
</selector>

但这一选择并没有像对政府施压和政府关注那样停滞不前。
我希望在用户开始该活动之前,该项保持突出显示。

最佳答案

我正在创建一个应用程序,其中我有三个项目在行动栏。我
希望当我点击其中一个项目时,它会被突出显示。
我不确定以下操作是否正常:
为每个菜单项创建两组图标:一组用于默认外观,另一组突出显示(无论您感觉如何:更改颜色、更改背景色等)。声明一个全局Menu变量来保存菜单项:

// Global variable // Not good practice, but needed in this case
Menu mainMenu;

....
....

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_name, menu);

    mainMenu = menu;

    return true;
}

onMenuItemSelected(int featureId, MenuItem item)
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    for (int i = 0; i < mainMenu.size(); i++) {

        // Set default icons
        if (mainMenu.getItem(i).getItemId() == R.id.action1) {
            mainMenu.getItem(i).setIcon(R.drawable.icon_default1);
        } else if (mainMenu.getItem(i).getItemId() == R.id.action2) {
            mainMenu.getItem(i).setIcon(R.drawable.icon_default2);
        } else if (.....) {
            .....
        }
    }

    if (item.getItemId() == R.id.action1) {
        item.setIcon(R.drawable.icon_highlighted1);
    } else if (item.getItemId() == R.id.action2) {
        item.setIcon(R.drawable.icon_highlighted2);
    } else if(.....) {
        .....
    }

    return super.onMenuItemSelected(featureId, item);
}

我想你可以通过检查item.getItemId()内部的for-loop来微调这个。

07-28 04:05
查看更多