有没有办法更改导航图标的左边距和操作项的右边距Toolbar?
android android-optionsmenu android-actionbar android-toolbar
这是我得到的警告:
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的新手,正在开发我的第一个应用程序.
我的主要活动是没有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开发的书,让我开始编写我的第一个真正的应用程序.我已经达到了为我的一项活动制作选项菜单的程度.菜单显示,但菜单项的相应图标拒绝显示.这是菜单的代码:
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 ..
有任何想法吗?
我在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
我正在使用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) 我的选项菜单中有这个项目:
<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
我有一个带有选项菜单的简单应用程序,它在片段的开头变化.问题是,在开始时除了第一个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中完全替换片段.
我已经看到几个关于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应用程序,我试图尽可能地尊重最新的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