嗨,我正在创建一个应用程序,它是一个标签应用程序.
在我的Home中扩展了sherlockFragmentActivity,我正在膨胀menu.xml并包含on optionMenuitem点击监听器的代码.Fragmentactivity包含tabhost,并在每个选项卡上加载片段.这是我的menu.xml
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/setting_selector"
android:title=""
>
<menu >
<item
android:id="@+id/Profile"
android:showAsAction="ifRoom"
android:title="Profile"/>
<item
android:id="@+id/chngDoctor"
android:showAsAction="ifRoom"
android:title="Change doctor"
android:visible="false"/>
<item
android:id="@+id/changePword"
android:showAsAction="ifRoom"
android:title="Change password"/>
<item
android:id="@+id/logout"
android:showAsAction="ifRoom"
android:title="Logout"/>
</menu>
</item>
Run Code Online (Sandbox Code Playgroud)
这是我在类Home中的onCreateOptionMenu和onOptionItemSelected方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getSupportMenuInflater().inflate(R.menu.main, menu);
SubMenu subMenu = (SubMenu) menu.getItem(0).getSubMenu();
if(userType.equals("admin"))
subMenu.getItem(1).setVisible(true);
else
subMenu.getItem(1).setVisible(false);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是我的onOptionItemSelected方法
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId()) {
case R.id.Profile:
break;
case R.id.changePword :
break;
case R.id.chngDoctor :
break; …Run Code Online (Sandbox Code Playgroud) 假设我有一个选项菜单network_select,其中包含要连接的网络列表.
import Tkinter as tk
choices = ('network one', 'network two', 'network three')
var = tk.StringVar(root)
network_select = tk.OptionMenu(root, var, *choices)
Run Code Online (Sandbox Code Playgroud)
现在,当用户按下刷新按钮时,我想更新用户可以连接到的网络列表.
.config因为我看了看network_select.config()并没有看到一个看起来像我给它的选择的条目.ListVar.我刚刚在Eclipse的自动完成时错误地创建了一个Panel菜单,并且在我读取代码之前没有意识到它.由于我想要一个选项菜单,我没有看到显示器的细微差别,所以有谁知道这两个菜单之间的差异是什么?使用其中一个是否有任何优点或缺点?我看到的唯一区别是(我没有详细说明):
public boolean onCreateOptionsMenu(Menu menu)
Run Code Online (Sandbox Code Playgroud)
要么
public boolean onCreatePanelMenu(int featureId, Menu menu)
Run Code Online (Sandbox Code Playgroud)
谢谢(这不应该是赏金吗?)
我有一个片段,可以创建一个OptionMenu小部件.
...
options = ('White', 'Grey', 'Black', 'Red', 'Orange',
'Yellow', 'Green', 'Blue', 'Cyan', 'Purple')
var = StringVar()
optionmenu = OptionMenu(par, var, *options)
optionmenu.grid(column=column, row=row)
...
Run Code Online (Sandbox Code Playgroud)
我遇到的一个问题是每次选择一个新选项时,窗口小部件的宽度都会改变.我相信这是由于小部件中的文本更改宽度.如何使小部件保持一致的宽度?
我如何给出这样的下滑动画:
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="1000"
android:fromYDelta="0"
android:toYDelta="100%" />
</set>
Run Code Online (Sandbox Code Playgroud)
对于"选项菜单"打开.像这个动画:
我尝试setHasOptionsMenu(true);在我的活动中使用但是我收到了错误."无法解析方法setHasOptionsMenu".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.job_status_option_menu, menu);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud) 我目前正在将一个iPhone应用程序的端口用于Android.iPhone应用程序在屏幕底部有一个自定义的全局导航菜单,当把它带到Android时,建议用通用选项菜单(通过设备上的选项键调用)替换这个自定义菜单给它更原生的Android外观和感觉.
问题是菜单本身有几层(例如A,B,C三个主要选项,以及A1,A2,A3等子选项).我环顾四周,但没有在Android应用程序上看到这种多级选项菜单,所以我正在寻找一些关于如何最好地实现这一目标的指南.
我已经看到了一些关于自定义选项菜单的问题,比如这个; Android:自定义应用程序的菜单(例如背景颜色) ; 他们似乎暗示原生框架不支持很多选项.
我是否应该在选项菜单中查看一些黑客攻击(这是一个好主意吗?),或者查看其他一些修改应用程序流的方法?试图了解在Android上保持一致用户体验的最佳方式,同时降低iPhone应用程序的变化程度.
谢谢!
即使标题中有空间,我仍然坚持使用ABS中的菜单项可见性.事情是我在不同尺寸的设备测试,但在每种情况下,我只能看到一个,那就是溢出菜单.
我正在使用onPrepareOptionsMenu动态管理我的菜单,这是完美的.(但不知道可能是这个问题发生再见onPrepareOptionsMenu或其他原因).
查看差异:

第一种方法我以编程方式创建菜单,并使用setShowAsAction()设置该可见性.在某个地方我也发现了setShowAsActionflag(),我也试过了.但在这种情况下,我无法看到溢出菜单small screen 320*480.所以,这是我在编程方法上的问题.
这是我的代码
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stu
// TO Remove older menu otherwise that will apped menu each time.
menu.clear();
menu.add(Menu.NONE, MENU_SEARCH, Menu.NONE, "Search").setIcon(R.drawable.ic_search).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menu.add(Menu.NONE, MENU_SETTING, Menu.NONE, "Settings").setIcon(R.drawable.ic_action_settings)
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
if (is_session_exist == 1) {
menu.add(Menu.NONE, MENU_CHANGE_LOGIN, Menu.NONE, "Change Login").setIcon(R.drawable.ic_action_add_person)
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menu.add(Menu.NONE, MENU_LOGOUT, Menu.NONE, "Logout").setIcon(R.drawable.abs__ic_clear)
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
} else { …Run Code Online (Sandbox Code Playgroud) 我正在使用Espresso进行测试,首先打开操作栏:
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
Run Code Online (Sandbox Code Playgroud)
一切都还可以,但是我想点击一个选项菜单:
onView(withId(R.id.action_menu)).perform(click());
Run Code Online (Sandbox Code Playgroud)
菜单布局xml有一个id为"action_menu"的选项.
我收到一个错误:
android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: ***.********.******.android.debug:id/action_menu
If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.support.v7.widget.ListPopupWindow$DropDownListView{43fd3f58 VFED.VC. .F...... 24,24-612,168}
Run Code Online (Sandbox Code Playgroud)
我通过使用以下方式实现了这一步:
onView(withText(R.string.action_report)).perform(click());
Run Code Online (Sandbox Code Playgroud)
我想知道id有什么问题.
有任何想法吗?
我正在为应用程序实现" Read Aloud"或" Talkback".一切都在使用contentDescription文本,但是通过选项菜单,我发现没有任何相关内容contentDescription,我希望系统读取"Menu "+ item's name.
EX:我的菜单有2个项目:" 创建新文件夹 "和" 删除当前文件夹 ",目前,当我关注菜单项(支持轨迹球和蓝牙键)时,系统可以准确地说出菜单的文本.但我希望它更像" 1:菜单创建新文件夹 "和" 2:菜单删除当前文件夹 ".
那么,我该如何更改阅读文本?menu item当蓝牙键盘UP/DOWN按键时,如何获得专注?
optionmenu ×10
android ×8
python ×2
tkinter ×2
action-menu ×1
animation ×1
java ×1
menubar ×1
menuitem ×1
onclick ×1
python-2.7 ×1
talkback ×1