我想创建一个在单击菜单项后启动新活动的intent,但我不知道如何执行此操作.我一直在阅读android文档,但我的实现不正确..并且正确方向的一些指导会有所帮助.我在下面列出了我的代码并注释了我的问题区域,我想我正在调用错误的方法.
package com.jbsoft.SimpleFlashlight;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.*;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Button;
import android.widget.Toast;
public class SimpleFlashLightActivity extends Activity {
Button GreenButton; // Declare instances of buttons to use later
Button BlueButton;
private static final int OK_MENU_ITEM = Menu.FIRST;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
BlueButton = (Button) findViewById(R.id.bluebutton);
BlueButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Display msg when user clicks Blue Button
showColorChangeMsg();
// …
Run Code Online (Sandbox Code Playgroud) android event-handling menuitem options-menu onitemclicklistener
我的"选项菜单"上Activity
有一个MenuItem
"开始".MenuItem
选择此项后,我想更改菜单,使其包含MenuItem
"停止".最后,当选择"停止"时,我想改回"开始".
以下是我的代码中无法正常工作的部分内容.我在列表中列出了"开始"和"停止",mymenu.xml
我应该在创建菜单时删除"停止":
public class MyActivity extends Activity {
private boolean isStarted = false;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
menu.removeItem(R.id.stop);
inflater.inflate(R.menu.mymenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.start:
isStarted = true;
return true;
case R.id.stop:
isStarted = false;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(isStarted) {
menu.removeItem(R.id.start);
menu.add(R.id.stop);
} else { …
Run Code Online (Sandbox Code Playgroud) 当用户点击搜索图标时,我有一个可在我的OptionsMenu中扩展的SearchView.但是,它仅在其他OptionsMenu图标中的可用空间内扩展.在宽屏幕上这很好,但是在狭窄的空间内,只有在搜索框中显示5-10个字符的空间.我希望它覆盖其他图标,例如它适用于Android Contacts应用程序.目前,我正在建设targetSdkVersion = 17.希望我错过了一些简单的东西:)
(注意后来添加:到目前为止,我发现可行的唯一解决方案是在我想扩展搜索图标时隐藏所有菜单图标.这在概念上很简单.但它很混乱,因为在恢复隐藏的图标时,必须要去通过一堆逻辑来确定哪些要恢复,或保持状态变量等等)
这是OptionsMenu的项目xml:
<item
android:id="@+id/menu_search_shallow"
android:title="Search Current Folder"
android:icon="@drawable/ic_btn_search"
android:showAsAction="always|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
我的主要活动代码中也有:
@Override
public boolean onCreateOptionsMenu (Menu menu)
{
getMenuInflater().inflate(R.menu.nav_menu, menu);
this.optionsMenu = menu;
MenuItem searchItem = menu.findItem (R.id.menu_search_shallow);
searchItem.setOnActionExpandListener (this);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint (getString (R.string.search_shallow_hint));
searchItem = menu.findItem (R.id.menu_search_deep);
searchItem.setOnActionExpandListener (this);
searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint (getString (R.string.search_deep_hint));
}
Run Code Online (Sandbox Code Playgroud)
和
@Override
public boolean onMenuItemActionExpand(MenuItem item)
{
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener (this);
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item)
{ …
Run Code Online (Sandbox Code Playgroud) 我有一个菜单创建通过:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("Email");
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
但我不记得如何设置一个onclicklistener所以当它选择我可以运行我的电子邮件功能.
我正在阅读一本关于Android开发的书,让我开始编写我的第一个真正的应用程序.我已经达到了为我的一项活动制作选项菜单的程度.菜单显示,但菜单项的相应图标拒绝显示.这是菜单的代码:
ReminderListActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.list_menu, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)
RES /菜单/ list_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_insert"
android:icon="@drawable/menu_add"
android:title="@string/menu_insert" />
</menu>
Run Code Online (Sandbox Code Playgroud)
我已将ic_menu_add.png图标(32x32px)从我的一个Android SDK子文件夹复制到我的res/drawable-mdpi文件夹,并将该文件重命名为menu_add.png.我在eclipse中刷新了文件夹,因此图标显示出来,正如您所看到的,我将其设置为布局文件中菜单项的图标.我尝试在模拟器中运行我的项目几次,但图标永远不会出现.为了记录,我使用Android 4.0.3 ..
有任何想法吗?
在运行访问其中一个菜单项的特定代码之前,我需要确保已创建选项菜单.是否有回调或如何实现?
是否有保证在活动的onResume()上创建了菜单?
你好Android开发者,
我看到很多关于选项菜单更新的问题.但是,每个答案都说我必须打电话invalidateOptionsMenu()
.
我的问题是,有没有其他方法更新选项菜单而不调用方法invalidateOptionsMenu()
?
我已经看到几个关于openOptionsMenu()无法在各种Android版本上运行的问题的报告,例如:
但我遇到的问题似乎与正在使用的appcompat-v7支持库的版本有关.
实质上,对于较新版本的appcompat-v7,如果您的活动扩展了Activity,则在调用openOptionsMenu()时菜单将显示正常,但如果您扩展ActionBarActivity或AppCompatActivity(即使用兼容性库)则不会起作用.在较旧版本的appcompat-v7中,它可以正常工作.
它是可重复的,如下:
经过一些测试后,我发现这已停止在appcompat-v7:22.1.0中运行,并且将不再适用于此jar的任何较新版本.
这种行为在模拟器和物理设备上是相同的,在Android版本5.1.1(23)和2.1(7)上是我测试过的两个版本.
我添加了对此错误的评论:Android问题跟踪器错误
任何建议,想法或变通方法表示赞赏!
史蒂夫
java android options-menu android-optionsmenu android-support-library
在Android中使用ActionBar时,如何刷新选项菜单?我试图隐藏并显示该栏,并使用"getSupportActionBar()"获取它的新实例
我正在尝试实现一个登录/注销按钮,该按钮将根据用户的状态动态更改.
这是我的onCreateOptionsMenu方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (loggedIn)
menu.add(0, MENU2, 0, "Logout").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
else
menu.add(0, MENU2, 0, "Login").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(0, MENU1, 0, "Home").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我试图在我的Android应用程序中更改选项菜单的背景颜色.我正在使用ActionBarSherlock库.我试过这段代码来改变选项菜单的背景颜色
但我最终得到一个例外"java.lang.illegalstateexception:已经在此layoutinflater上设置了一个工厂"
LayoutInflater.setFactory();
我不知道这段代码有什么问题.任何人都可以帮我解决这个问题吗?
android background-color options-menu android-optionsmenu oncreateoptionsmenu