获取由 onCreateOptionsMenu(Action Menu) - ToolBar 创建的视图
Get view which is created by onCreateOptionMenu(ActionMenu) - ToolBar
我正在尝试从菜单中获取 View
,该菜单是在 onCreateOptionMenu()
的帮助下生成的,并绑定在 ToolBar
的右上角。
原因:
我想显示 ShowCaseView
,它显示与工具栏上的菜单关联的我的应用程序的功能。
尝试过:
正在设置 ActionView(actionViewClass)。然后在
的帮助下查看
(View)menu.findItem(R.id.menu_search); //which returns null every time.
从 Activity 中找到该视图 - 它确实 return 视图但不是第一次尝试。
getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
我在
的帮助下获得了工具栏 - 后退按钮 (ImageButton) 视图
mToolBar.getChildAt(0);
这是我的 menu_mother :
<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
中添加此内容,请注意回调将被调用两次,第一次无法找到视图,因为菜单尚未展开。因此,我包含了对 not null 的检查,这是必需的。
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);
我正在尝试从菜单中获取 View
,该菜单是在 onCreateOptionMenu()
的帮助下生成的,并绑定在 ToolBar
的右上角。
原因:
我想显示 ShowCaseView
,它显示与工具栏上的菜单关联的我的应用程序的功能。
尝试过:
正在设置 ActionView(actionViewClass)。然后在
的帮助下查看(View)menu.findItem(R.id.menu_search); //which returns null every time.
从 Activity 中找到该视图 - 它确实 return 视图但不是第一次尝试。
getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
我在
的帮助下获得了工具栏 - 后退按钮 (ImageButton) 视图mToolBar.getChildAt(0);
这是我的 menu_mother :
<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
中添加此内容,请注意回调将被调用两次,第一次无法找到视图,因为菜单尚未展开。因此,我包含了对 not null 的检查,这是必需的。
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);