标签: menuitem

MenuItem的选中状态未通过其图标正确显示

我有这样定义的MenuItem:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_starred"
        android:icon="@drawable/btn_star"
        android:title="@string/description_star"
        android:checkable="true"
        android:checked="true"
        android:orderInCategory="1"
        android:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)

并以btn_star.xml这种方式定义:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_checked="false" 
        android:drawable="@drawable/btn_star_off_normal" />
    <item 
        android:state_checked="true"
        android:drawable="@drawable/btn_star_on_normal" />
</selector>
Run Code Online (Sandbox Code Playgroud)

当我创建使用此选项菜单,但是,图标永远不会在其选中的状态显示,即使MenuItemisChecked()属性为true.

我正在使用ActionBarSherlock控件,但是,如果我只是创建一个普通的选项菜单并调用,我得到相同的结果setChecked(true).btn_star_off无论项目的检查状态如何,它仍然显示drawable.

onOptionsItemSelected()正确调用该方法,我可以成功更改checked属性:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.isCheckable()) {
            item.setChecked(!item.isChecked());
        }
        return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

在此处设置断点会显示isChecked属性已更改,但图标本身未更新以反映正确的状态.

这里有什么我想念的吗?我做错了吗?我无法弄清楚为什么这不能正常工作.

android menu menuitem android-actionbar

17
推荐指数
3
解决办法
2万
查看次数

从代码中选中一个菜单项

我有一个Android应用程序,其中一个活动中包含以下菜单项(涉及处理名称和mac编号列表):

<item android:id="@+id/menu_sort_tagg"
      android:icon="@android:drawable/ic_menu_sort_by_size"
      android:title="@string/menu_sort_list" >
      <menu> 
        <group android:checkableBehavior="single">
            <item android:id="@+id/sort_by_name"
                  android:title="@string/sort_by_name" />
            <item android:id="@+id/sort_by_mac"
                          android:title="@string/sort_by_mac" />

     </menu>
</item>
Run Code Online (Sandbox Code Playgroud)

当应用程序状态发生变化时,我希望能够使用以下代码预先检查上次使用的排序选项列表中的哪个项目:

((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true);
Run Code Online (Sandbox Code Playgroud)

问题是这个特定的行给了我一个运行时异常.有没有人知道为什么?

查看日志会发现运行时异常是由空指针异常触发的.通过这种方式更改代码:

MenuItem mi = (MenuItem)findViewById(R.id.sort_by_name);
mi.setChecked(true);
Run Code Online (Sandbox Code Playgroud)

很明显,异常发生在seconds语句中,即MenuItem mi为null.那么为什么第一个语句无法将指针指向正确的MenuItem?

android nullpointerexception menuitem runtimeexception

16
推荐指数
2
解决办法
3万
查看次数

为菜单项设置布局时,不调用OnMenuItemSelected

我有一个从main_menu.xml膨胀的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:id="@+id/act_sync" 
        android:showAsAction="always"
        android:actionLayout="@layout/sync_action"
        android:icon="@android:drawable/ic_popup_sync" />
</menu>
Run Code Online (Sandbox Code Playgroud)

这是活动中的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    MyMessageHandler.debug("menu item selected");
    switch(item.getItemId()){
    case R.id.act_sync:
        sync();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

但是当我触摸菜单项时,不会调用onOptionsItemSelected.当我删除菜单项的actionLayout属性时,它工作正常.我怎样才能解决这个问题?
谢谢.

android menuitem android-layout android-inflate android-actionbar

16
推荐指数
2
解决办法
7193
查看次数

Android MenuItem自定义布局

当我点击操作栏中的操作按钮时,会出现一个PopupMenu.我想在我的PopupMenu中使用像这样的自定义布局的MenuItem:

布局/ menu_item_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/menuItemLayout"

    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageViewMenuItem"
        android:layout_width="20dip"
        android:layout_height="20dip"
        android:src="@drawable/abc_list_focused_holo" />

    <TextView
        android:id="@+id/textViewMenuItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextViewMenuItem" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是PopUpMenu的xml:

菜单/ pop_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       tools:context="apparound.actiobarpopupstylefacebook.Main" >

    <item
        android:id="@+id/popupItem"
        android:showAsAction="ifRoom"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

我的活动代码如下:

public void showPopup(int idR){
View menuItemView = findViewById(idR);
PopupMenu popup = new PopupMenu(this, menuItemView);
MenuInflater inflate = popup.getMenuInflater();
inflate.inflate(R.menu.pop_menu, popup.getMenu());
MenuItem menuItem= popup.getMenu().findItem(R.id.popupItem);
menuItem.setActionView(R.layout.menu_item_layout);
popup.show();
}
Run Code Online (Sandbox Code Playgroud)

但是当出现popupmenu时,item为空.我使用setActionview()方法错了吗?谢谢.

layout android menuitem

16
推荐指数
1
解决办法
2万
查看次数

如何将ViewModel的ObservableCollection绑定到MenuItem?

当我使用ObservableCollection绑定菜单项时,只能点击MenuItem的"内部"区域:

alt text http://tanguay.info/web/external/mvvmMenuItems.png

在我的视图中我有这个菜单:

<Menu>
    <MenuItem 
        Header="Options" ItemsSource="{Binding ManageMenuPageItemViewModels}"
              ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
Run Code Online (Sandbox Code Playgroud)

然后我用这个DataTemplate绑定它:

<DataTemplate x:Key="MainMenuTemplate">
    <MenuItem
        Header="{Binding Title}" 
        Command="{Binding DataContext.SwitchPageCommand,
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}" 
        Background="Red"
        CommandParameter="{Binding IdCode}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

由于ObservableCollection ManageMenuPageItemViewModels中的每个ViewModel 都有一个属性TitleIdCode,因此上面的代码一见即可.

但是,问题是DataTemplate 中的MenuItem实际上另一个MenuItem中(就像它被绑定两次一样),因此在上面的DataTemplate中,Background ="Red",每个菜单项中都有一个Red框,只有这个区域可以单击,而不是整个菜单项区域本身(例如,如果用户点击复选标记所在的区域或内部可点击区域的右侧或左侧,则没有任何反应,如果您没有单独的颜色很混乱.)

将MenuItems绑定到ViewModel的ObservableCollection的正确方法是什么,以便每个MenuItem中的整个区域都是可点击的?

更新:

所以我根据下面的建议进行了以下更改,现在有了这个:

alt text http://tanguay.info/web/external/mvvmMenuItemsYellow.png

我只有我的DataTemplate中TextBlock的,但我还是不能"色全菜单项",但只是将TextBlock:

<DataTemplate x:Key="MainMenuTemplate">
    <TextBlock Text="{Binding Title}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我将Command绑定到Menu.ItemContainerStyle,但它们现在不会触发:

<Menu DockPanel.Dock="Top">
    <Menu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Background" Value="Yellow"/>
            <Setter …
Run Code Online (Sandbox Code Playgroud)

wpf xaml datatemplate mvvm menuitem

15
推荐指数
2
解决办法
2万
查看次数

CSS:如何将水平列表居中?显示:内联无法正常工作

让最简单的代码工作我遇到了很大的麻烦.我希望我的css水平列表居中,就是这样.

链接到这里:http://bit.ly/LtIBai

我有这个代码:

#megaMenu.megaMenuHorizontal ul.megaMenu {
text-align: center;
 }

#megaMenu.megaMenuHorizontal ul.megaMenu > li {
display: inline;
}
Run Code Online (Sandbox Code Playgroud)

然而它不会居中?

注意:窗口必须是"平板电脑肖像"大小才能看到我所指的代码.大约800px宽,当徽标居中并且菜单落到下一行时,但在移动菜单出现之前.

css menu alignment menuitem centering

15
推荐指数
1
解决办法
3万
查看次数

将一个项目对齐ActionBar的左侧

我想将ActionBar左侧的一个项目与右侧的其他项目对齐,如下所示:

在此输入图像描述

我的菜单xml中有5个项目.

main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="fr.mgs.consulting.allbrary_android.MainActivity" >

<item 
    android:id="@+id/action_spinner"
    android:showAsAction="always"
    android:actionLayout="@layout/spinner_actionbar"
    android:title="@string/action_spinner"

    android:orderInCategory="1"/>

<item 
    android:id="@+id/action_search"
    android:showAsAction="always"
    android:title="@string/action_spinner"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="2"/>

<item 
    android:id="@+id/action_tablet"
    android:showAsAction="never"
    android:title="@string/action_spinner"
    android:icon="@drawable/ic_action_tablet"
    android:orderInCategory="3"/>

<item 
    android:id="@+id/action_notifications"
    android:showAsAction="always"
    android:title="@string/action_spinner"
    android:icon="@drawable/ic_action_notifications"
    android:orderInCategory="4"/>

<item 
    android:id="@+id/action_user"
    android:showAsAction="always"
    android:title="@string/action_spinner"
    android:icon="@drawable/ic_action_user"
    android:orderInCategory="5"/>
Run Code Online (Sandbox Code Playgroud)

我们该怎么做?抱歉我的英语非常差劲.

android menu menuitem android-actionbar

15
推荐指数
1
解决办法
8111
查看次数

没有图标区域的System.Windows.Controls.MenuItem

每当我尝试使用WPF菜单项的外观时,我都有机会自定义标题,这基本上是项目的文本.

我需要的是一个黑色菜单,白色文字,没有"图标区域".

||一些文字http://img848.imageshack.us/img848/7622/iconarea.png

如何删除菜单项的图标区域?

谢谢.

wpf customization menuitem

14
推荐指数
2
解决办法
2万
查看次数

可可:设置密钥等价物

我想用[menuitem setKeyEquivalent:(NSString*)s]设置menuitem的等效键,如果我有多个修饰符,我该怎么做?

我试过了:

unichar shift = NSShiftKeyMask, cmd = NSCommandKeyMask;
NSMutableString *keyequiv = [[NSMutableString alloc] init];

[keyequiv appendString:[NSString stringWithCharacter:&shift, 1]];
[keyequiv appendString:[NSString stringWithCharacter:&cmd, 1]];
[keyequiv appendString:@"x"];
[menuItem setKeyEquivalent:keyequivalent];
Run Code Online (Sandbox Code Playgroud)

但那不起作用.

cocoa key hotkeys objective-c menuitem

14
推荐指数
2
解决办法
8732
查看次数

即使在Items.clear之后,TPopupMenu仍保留最大宽度

如何重置PopupMenu项目列表的最大宽度?

比如你在运行时向popupmenu添加一些TMenuItems:

item1: [xxxxxxxxxxxxxxxxxxx]
item2: [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]
Run Code Online (Sandbox Code Playgroud)

菜单会自动调整大小以适合最大的项目.但是然后你做Items.Clear并添加一个新项目:

item1: [xxxxxxxxxxxx                    ]
Run Code Online (Sandbox Code Playgroud)

最终结果如此,标题后面有一个很大的空白区域.

除了重新创建popupmenu之外还有其他解决方法吗?

这里是重现这种异常的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  t: TMenuItem;
begin
  t := TMenuItem.Create(PopupMenu1);
  t.Caption := 'largelargelargelargelargelarge';
  PopupMenu1.Items.Add(t);
  PopupMenu1.Popup(200, 200);
end;

procedure TForm1.Button2Click(Sender: TObject);
var 
  t: TMenuItem;
begin
  PopupMenu1.Items.Clear;
  t := TMenuItem.Create(PopupMenu1);
  t.Caption := 'short';
  PopupMenu1.Items.Add(t);
  PopupMenu1.Popup(200, 200);
end;
Run Code Online (Sandbox Code Playgroud)

delphi popupmenu menuitem delphi-xe7

14
推荐指数
2
解决办法
1333
查看次数