我正在创建一个Android应用程序,我正在尝试将一些java代码应用于xml菜单项,但它们不会被夸大。我在菜单xml文件中定义了一些菜单项(存储在res / menu / main.xml中),定义如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".HomeActivity"
app:showAsAction="always">
<item android:id="@+id/action_close"
android:title="Close"
android:icon="@drawable/exitediting"
android:enabled="false"
app:showAsAction="always"/>
<item android:id="@+id/action_edit"
android:title="Edit"
android:icon="@drawable/editbutton"
android:enabled="false"
app:showAsAction="always"/>
<item android:id="@+id/action_mainedit"
android:title="MainEdit"
android:icon="@drawable/exitediting"
android:enabled="true"
app:showAsAction="always"/>
</menu>
在我的主要活动中,java代码然后覆盖菜单缓冲器,如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
createAnimatorSets();
return true;
}
然后在我的createAnimatorSets函数中,我尝试访问像这样的按钮
final ActionMenuItemView editButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_edit);
final ActionMenuItemView closeButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_close);
final ActionMenuItemView mainButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_mainedit);
这只是返回null。我试图在代码中设置一个断点并观察一些变量。 R.id.action_edit按预期返回id,但findViewById(R.id.action_edit)和toolbar.getChildAt(1).findViewById(R.id.action_edit)都返回null。工具栏本身(变量名称工具栏)在那里,按钮存储在里面,但由于某些原因它们没有膨胀才能被利用。我也尝试在onStart方法而不是onCreate中进行,但这也不起作用。有谁知道如何解决这个问题。
由于
答案 0 :(得分:0)
您可以使用
在onCreateOptionsMenu(Menu menu)
方法中获取对MenuItem的引用
MenuItem edit = menu.findItem(R.id.action_edit);
View actionViewEdit = edit.getActionView();
一旦你的菜单膨胀了。
答案 1 :(得分:0)
因此经过大量测试后,似乎菜单只会在onResume中膨胀。这导致了我的问题的一个非常hacky的解决方案,但在将来如果人们为此努力,你需要在onresume上做你的东西,并且如果需要的话,只需将按钮设置为最初隐藏在xml中