标签: android-optionsmenu

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

在Android 4.1.x上取消ActionBar Overflow菜单时发出警告

这是我得到的警告:

03-02 14:38:43.980: W/InputEventReceiver(3961): Attempted to finish an input event but the input event receiver has already been disposed.

我的菜单是从常规res/menu/activity_menu.xml文件生成的.我正在http://developer.android.com/guide/topics/ui/menus.html#options-menu上详细处理事件

当我点击垂直三个点来打开溢出菜单并取消它时,我收到了警告.似乎很少知道如何抓住它的触发器.有任何想法吗?

android warnings android-optionsmenu

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

按菜单按钮会导致Activity没有ActionBar崩溃

我是Android的新手,正在开发我的第一个应用程序.

我的主要活动是没有ActionBar.而且我不想在其中显示任何菜单Activity.一切都工作正常但是当我按下设备本身的菜单按钮时,它会导致我的应用程序强行关闭而不是忽略它.

我正在为sdk> = 8开发,所以我正在使用支持库.我尝试OnCreateOptionMenu()在代码中添加任何内容,但结果却相同.

我的应用程序的名称是GUI,包是gui.这是Logcat:

10-09 19:52:32.920: E/AndroidRuntime(7440): FATAL EXCEPTION: main
10-09 19:52:32.920: E/AndroidRuntime(7440): java.lang.NullPointerException
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.app.Activity.onCreatePanelMenu(Activity.java:2554)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:453)
10-09 19:52:32.920: E/AndroidRuntime(7440):     at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:853)
10-09 19:52:32.920: E/AndroidRuntime(7440): …
Run Code Online (Sandbox Code Playgroud)

android android-optionsmenu android-actionbar

18
推荐指数
1
解决办法
7058
查看次数

Android选项菜单图标将不会显示

我正在阅读一本关于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 ..

有任何想法吗?

android options-menu android-icons android-optionsmenu

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

Viewpager中的Fragments的OptionsMenu显示彼此的按钮

我在viewpager中有三个片段.

其中两个片段有自己的onCreateOptionsMenu方法版本:

 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    // Set up 1 action button
    inflater.inflate(R.menu.home_snapshot_add, menu);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    // Set up 2 action buttons
    inflater.inflate(R.menu.home_snapshot_send, menu);
}
Run Code Online (Sandbox Code Playgroud)

home活​​动有一个基本的onCreateOptionsMenu方法:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在onCreate方法中,每个片段都调用该方法:

setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)

每个菜单项都有标签:

android:showAsAction="always"
Run Code Online (Sandbox Code Playgroud)

好像我打开Activity一样,所有三个按钮都出现了.然而,当我滚动它们时,错误的那些神奇地消失了.感觉就像活动在Activity创建时调用每个Fragment的选项菜单,然后在我向左和向右滑动时适当地更改菜单.我检查了菜单,但不确定是什么问题.您认为我需要检查的任何事情?我有点想法了.

谢谢!

android android-fragments android-optionsmenu android-actionbar

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

工具栏选项菜单背景颜色

我正在使用Android工具栏.我只想更改溢出菜单的背景颜色.但它并没有改变.

风格xml

<style name="MyDarkToolbarStyle" parent="Widget.AppCompat.Toolbar">
    <item name="popupTheme">@style/PopupMenuStyle</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

<style name="PopupMenuStyle" parent="android:Widget.Holo.Light.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)

工具栏XML

    <android.support.v7.widget.Toolbar
    android:id="@+id/tool_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/ColorPrimary"
    android:elevation="2dp"
    android:theme="@style/MyDarkToolbarStyle" />
Run Code Online (Sandbox Code Playgroud)

android menu popup toolbar android-optionsmenu

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

根据打开的片段更改操作栏中的选项菜单图标

我的选项菜单中有这个项目:

<item
    android:id="@+id/opt_mnu_action"
    android:icon="@android:drawable/ic_dialog_info"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    android:title="New">
</item>
Run Code Online (Sandbox Code Playgroud)

菜单本身在主FragmentActivity中创建.我想根据打开的Fragment以编程方式更改此项目的图标,显然,当用户点击此按钮时会有不同的操作.我尝试了几件事,但没有任何效果.我尝试的最后一件事是我的Fragment的onCreateView方法中的代码:

MenuItem mi = (MenuItem) view.findViewById(R.id.opt_mnu_action);
mi.setIcon(R.drawable.ico_1);
Run Code Online (Sandbox Code Playgroud)

但我的应用程序崩溃了.有没有办法做到这一点?

**更新**

以下是我现在要做的事情,所有这些都在我的主要主要FragmentActivity中:首先,我MenuItem action_button;在我的层次结构视图中有一个.然后在我的onCreateOptionsMenu方法中我实例化它:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);
    action_button = menu.findItem(R.id.opt_mnu_action);
    return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了这个函数来根据打开的标签更改图标:

public void change_action_button_icon(int tab_position)
{
    switch(tab_position)
    {
    case 0:
        action_button.setIcon(R.drawable.ico_1);
        break;
    case 1:
        action_button.setIcon(R.drawable.ico_2);
        break;
    case 2:
        action_button.setIcon(R.drawable.ico_3);
        break;
    }
    invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)

我用我的onTabSelected方法称它为:

public void onTabSelected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
    mViewPager.setCurrentItem(tab.getPosition());
    setTab_position(tab.getPosition());
    change_action_button_icon(tab.getPosition());
}
Run Code Online (Sandbox Code Playgroud)

但是一旦我开始我的应用程序 - …

icons android menuitem android-fragments android-optionsmenu

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

onCreateOptionsMenu()在Fragment中调用两次

我有一个带有选项菜单的简单应用程序,它在片段的开头变化.问题是,在开始时除了第一个onCreateOptionsMenu()之外的任何片段都会被调用两次 - 在onCreate()和onResume()之后.在onCreate()中我通过setHasOptionsMenu(true)手动调用它,但是在onResume()之后它不应该发生.此外,这仅在第一个片段开始后发生.

这是基本片段代码:

class BaseFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle clicks
        return true;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // Create a menu
        super.onCreateOptionsMenu(menu, inflater);
    }
}
Run Code Online (Sandbox Code Playgroud)

并在Activity中更改片段代码:

public void startFragment(BaseFragment fragment) {
    getSupportFragmentManager()
    .beginTransaction()
    .replace(android.R.id.content, fragment)
    .commit();
}
Run Code Online (Sandbox Code Playgroud)

该示例不使用任何外部库,如ActionBarSherlock,只使用SupportLibrary.我想,问题出在FragmentTransaction的replace()方法中,因为它在第一个片段启动时工作正常.但我不知道,从哪里开始解决问题.我需要在View中完全替换片段.

android-fragments android-optionsmenu

11
推荐指数
3
解决办法
7977
查看次数

openOptionsMenu()在appcompat-v7 22.1.0或更新版本中不起作用

我已经看到几个关于openOptionsMenu()无法在各种Android版本上运行的问题的报告,例如:

跨Android版本的openOptionsMenu()

openOptionsMenu()不起作用

但我遇到的问题似乎与正在使用的appcompat-v7支持库的版本有关.

实质上,对于较新版本的appcompat-v7,如果您的活动扩展了Activity,则在调用openOptionsMenu()时菜单将显示正常,但如果您扩展ActionBarActivityAppCompatActivity(即使用兼容性库)则不会起作用.在较旧版本的appcompat-v7中,它可以正常工作.

它是可重复的,如下:

  1. 在Android Studio中,导入示例'ActionBarCompat-Basic'
  2. 在屏幕上添加一个按钮,调用openOptionsMenu()
  3. 请注意,这样可以正常工作,因为样本中使用了旧版本的库appcompat-v7:21.0.3
  4. 更改依赖关系以使用appcompat-v7:23.0.1,重建,单击按钮时菜单将不会出现.
  5. 更改主要活动以扩展活动(即没有应用程序兼容性) - 它的工作原理
  6. 更改主要活动以扩展AppCompatActivity(即使用应用程序兼容性libarry) - 它失败

经过一些测试后,我发现这已停止在appcompat-v7:22.1.0中运行,并且将不再适用于此jar的任何较新版本.

这种行为在模拟器和物理设备上是相同的,在Android版本5.1.1(23)和2.1(7)上是我测试过的两个版本.

我添加了对此错误的评论:Android问题跟踪器错误

任何建议,想法或变通方法表示赞赏!

史蒂夫

java android options-menu android-optionsmenu android-support-library

11
推荐指数
1
解决办法
1452
查看次数

如何使用Fragments在NavigationDrawer上隐藏OptionsMenu?

我正在创建Android应用程序,我试图尽可能地尊重最新的Android可用性标准.特别是,我正在使用导航抽屉准备用户界面,我正在努力确保与2.1+ Android版本的兼容性.为了理解这个问题,该项目包括:

  • 主要活动;
  • 导航抽屉;
  • 四个片段(与其相关的布局).

打开导航抽屉时遇到的问题是:虽然每个Fragment都有其特定菜单,但当我打开导航抽屉时,它会被添加到导航抽屉菜单中.我尝试了几种方式(invalidateOptionMenu(),menu.clear()操作函数isDrawerOpen()isDrawerClose()),但Fragment打开导航器时我无法删除菜单.

这些是我的代码的一些片段,其中大部分是由Android Studio生成的,我正在使用的IDE:

在主要活动中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        // Only show items in the action bar relevant to this screen
        // if the drawer is not showing. Otherwise, let the drawer
        // decide what to show in the action bar.
        getMenuInflater().inflate(R.menu.global, menu);
        restoreActionBar();
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)

其中"global"是一个带有经典"ic_action_overflow"的简单菜单.

在我的片段中,我:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-optionsmenu navigation-drawer

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