Android 获取由onCreateOptionMenu(操作菜单)-工具栏创建的视图
我试图从菜单中获取Android 获取由onCreateOptionMenu(操作菜单)-工具栏创建的视图,android,android-toolbar,android-menu,Android,Android Toolbar,Android Menu,我试图从菜单中获取视图,该菜单是在onCreateOptionMenu()的帮助下生成的,并绑定到工具栏的右角 原因: 我想显示ShowCaseView,其中显示了与工具栏上的菜单关联的应用程序的功能 尝试: 设置ActionView(actionViewClass)。然后借助于 (View)menu.findItem(R.id.menu_search); //which returns null every time. 从活动中查找该视图-它确实返回视图,但不是第一次尝试 getWindo
视图
,该菜单是在onCreateOptionMenu()
的帮助下生成的,并绑定到工具栏的右角
原因:
我想显示ShowCaseView
,其中显示了与工具栏上的菜单关联的应用程序的功能
尝试:
设置ActionView(actionViewClass)。然后借助于
(View)menu.findItem(R.id.menu_search); //which returns null every time.
从活动中查找该视图-它确实返回视图,但不是第一次尝试
getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
我确实得到了工具栏后退按钮(ImageButton)视图的帮助
mToolBar.getChildAt(0);
这是我的菜单,妈妈:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mobcast.MotherActivity" >
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_nav_search"
android:orderInCategory="100"
android:title="@string/action_search"
app:showAsAction="always"
android:visible="true"
tools:ignore="AlwaysShowAction"/>
<item
android:id="@+id/action_birthday"
android:icon="@drawable/ic_toolbar_birthday"
android:orderInCategory="100"
android:title="@string/action_birthday"
android:visible="true"
app:showAsAction="always"/>
<item
android:id="@+id/action_award"
android:icon="@drawable/ic_toolbar_award"
android:orderInCategory="100"
android:title="@string/action_award"
app:showAsAction="always"/>
<item
android:id="@+id/action_event"
android:icon="@drawable/ic_toolbar_search"
android:orderInCategory="100"
android:title="@string/action_event"
app:showAsAction="always"/>
<item
android:id="@+id/action_refresh"
android:icon="@drawable/ic_toolbar_search"
android:orderInCategory="100"
android:title="@string/action_refresh"
android:visible="false"
app:showAsAction="never"/>
<item
android:id="@+id/action_report"
android:icon="@drawable/ic_toolbar_search"
android:orderInCategory="100"
android:title="@string/action_report"
app:showAsAction="never"/>
</menu>
1。LayoutChangeListener
作为一种解决方法,您可以在onCreate
中添加此选项,提醒您回调将被调用两次,第一次无法找到视图,因为菜单尚未膨胀。因此,我包含了一个NOTNULL检查,这是必需的
final View.OnLayoutChangeListener onLayoutChangeListener = new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
int oldTop, int oldRight, int oldBottom) {
mMenuSearchView = v.findViewById(R.id.menu_search);
if (mMenuSearchView != null) {
//do whatever you want with the view
mToolbar.removeOnLayoutChangeListener(this);
}
}
};
mToolbar.addOnLayoutChangeListener(onLayoutChangeListener);
2。在DecorView的帮助下查找视图
new Handler().postDelayed(new Runnable(){
View mMenuAwardView = getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
},2000);
在菜单内选项选择意味着在OnOptions ItemSelected()中?@Heyyou我使用的是ShowCaseView库,它要求视图显示有关该视图及其功能的信息。这就是为什么我需要从onCreateOptionMenu()创建的视图。有什么启示吗?@Heyyou我只是第一次展示这些showcaseview。我不想触发OnOptions ItemSelected。Moreever OnOptions ItemSelected还返回MenuItem。所以在那里也没有运气:/I我确实在oncreateoptionmenu上调用了它。但是那里也不走运。让我试试这个!在getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
的帮助下,我确实获得了与您的答案相同的视图,我需要它调用两次。是的,我也读过。然而,就我个人而言,我不太确定getWindow().getDecorView().findViewById(android.R.id.content)和findViewById(R.id)背后的原因.行动奖)
但此仅限于ChangeListener