Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中突出显示操作栏项目选择_Android_Android Actionbar_Android Styles - Fatal编程技术网

如何在android中突出显示操作栏项目选择

如何在android中突出显示操作栏项目选择,android,android-actionbar,android-styles,Android,Android Actionbar,Android Styles,我正在创建一个应用程序,其中我在操作栏中有三个项目。我希望当我点击其中一个项目时,它应该突出显示 我浏览了几个可用的示例,但得出的结论是,我必须使用 ActionBar样式生成器工具 我参考了下面的链接。。但他并不满意 这是唯一的办法吗 <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarItemBack

我正在创建一个应用程序,其中我在操作栏中有三个项目。我希望当我点击其中一个项目时,它应该突出显示

我浏览了几个可用的示例,但得出的结论是,我必须使用 ActionBar样式生成器工具

我参考了下面的链接。。但他并不满意

这是唯一的办法吗

<!-- 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>

@可绘图/操作栏项目选择器
selector.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>

但这种选择并不是一成不变的,因为它是针对州政府和州政府的


我希望项目保持高亮显示,直到用户进入该活动。

您可以定义主题并继承所需的操作栏主题(例如
主题.Sherlock.Light.darkaActionBar
),设置
android:actionBarItemBackground
属性的值以覆盖继承主题中的默认值

<style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="android:actionBarItemBackground">custom_selector</item>
</style>

自定义选择器

好的,我建议您在
菜单中创建两个不同的项。xml

<item
    android:id="@+id/action_item1" 
   /> 


<item 
    android:id="@+id/action_item2"
    android:visible="false"
    />

然后,在要突出显示项目的活动中,覆盖打开的
onprepareOptions功能表
,使用
菜单
参数表,通过使用
菜单.findItem(R.id.your_item_id)
捕捉所需项目。最后切换项目的可见性

您需要使用
invalidateOptions功能表

如果有帮助,请告诉我

我正在创建一个应用程序,其中我在操作栏中有三个项目。我 我希望当我点击其中一个项目时,它会突出显示

我不确定以下各项是否能正常工作:

为每个菜单项创建两组图标:一个用于默认外观,另一个高亮显示(无论您感觉如何:更改颜色、更改背景色等)。声明一个全局
菜单
变量以保存菜单项:

// 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项)

@覆盖
公共布尔值onMenuItemSelected(int-featureId,MenuItem项){
对于(int i=0;i

我想您可以通过检查
for循环本身中的
item.getItemId()
来对此进行微调。

更优雅的处理问题的方法是,只需使用一个布尔值进行检查 这两个州,如果您使用相同的绘图板与不同的州颜色,我会推荐 您需要使用colorFilter方法应用于您的绘图

 private boolean mSomeValue = true; 

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
      // determine the menu item you want to highlight when selected
      switch(item.getItemId) {
           case yourItem : {
                if (mSomeValue) {
                    item.getIcon().setColorFilter(YourColor, PorterDuff.Mode.MULTIPLY);
                    mSomeValue = false;
                } else {
                    mSomeValue = true;
                    item.getIcon().setColorFilter(Default, PorterDuff.Mode.MULTIPLY);
                }
            break; ...
           }
      }
      return super.onOptionsItemSelected(item);
 }

检查我的新答案!这似乎是完美的工作。但这是唯一的方法吗?@anuja
这似乎工作得很好。但这是唯一的办法吗?
。在我看来,这更像是一种变通办法。我不确定是否存在其他解决方案。这对于android:icon=“@android:drawable/ic_menu_view”和Color.DKGRAY这样的图标尤其有效,可以模拟按下状态,而clearColorFilter()可以模拟正常状态。
 private boolean mSomeValue = true; 

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
      // determine the menu item you want to highlight when selected
      switch(item.getItemId) {
           case yourItem : {
                if (mSomeValue) {
                    item.getIcon().setColorFilter(YourColor, PorterDuff.Mode.MULTIPLY);
                    mSomeValue = false;
                } else {
                    mSomeValue = true;
                    item.getIcon().setColorFilter(Default, PorterDuff.Mode.MULTIPLY);
                }
            break; ...
           }
      }
      return super.onOptionsItemSelected(item);
 }