我试图从菜单中获取View
,该onCreateOptionMenu()
是在ToolBar
的帮助下生成并绑定到ShowCaseView
的右上角。
原因:
我想显示(View)menu.findItem(R.id.menu_search); //which returns null every time.
,其中显示了与ToolBar上的菜单相关联的应用程序的功能。
尝试:
设置ActionView(actionViewClass)。然后在
的帮助下获取视图getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
从“活动”中查找该视图 - 它确实返回视图但不是第一次尝试。
mToolBar.getChildAt(0);
我在
的帮助下获得ToolBar - Back Button(ImageButton)视图<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>
这是我的menu_mother:
ul
答案 0 :(得分:2)
<强> 1。 LayoutChangeListener 强>
作为一种解决方法,您可以在onCreate
中添加此内容,请注意回调将被调用两次,第一次无法找到视图,因为菜单尚未充气。因此,我已经包含了一个非空的检查,这是必需的。
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帮助FindView
new Handler().postDelayed(new Runnable(){
View mMenuAwardView = getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
},2000);