问题描述
我有一个带有一些操作栏按钮的工具栏。我希望相机图标按钮不出现,如果 Build.VERSION.SDK_INT
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@+id/addons"
android:icon="@drawable/ic_add_Box_black_24dp"
android:title="camera"
app:showAsAction="always"/>
<item
android:id="@+id/hellosearch"
android:icon="@drawable/ic_search_black_24dp"
android:title="camera"
app:showAsAction="always"/>
//在 MainActivity 里面我重写了这个方法:
@Override
public boolean onoptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.addons:
//we are requesting to purchase something:
Log.d("billing009","trying to start a purchase!! user has accesss(subs): "+user_has_autorenew_subs+
" didFind :: " + didFindTotalAccess);
showPurchaseDialog(styled_title);
//inHouseMethod_StartPurchase();
break;
case R.id.hellosearch:
mDrawer.openDrawer(GravityCompat.START);
return true;
如何使用在 onCreate: 中创建的工具栏对象来获取相机图标(ActionBar 按钮),以便在 Build.VERSION.SDK_INT
//inside onCreate
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
解决方法
你可以在 onCreateOptionsMenu 中这样做
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.your_menu_xml,menu);
if(Build.VERSION.SDK_INT < 21) {
MenuItem item = menu.findItem(R.id.idOfYourMenuItem);
item.setVisible(false);
}
return true;
}
,
将此方法放在您的活动中
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem camera = menu.findItem(R.id.addons);
if(Build.VERSION.SDK_INT < 21)
{
camera.setVisible(true);
}
else
{
camera.setVisible(false);
}
return true;
}
onPrepareOptionsMenu 准备要显示的屏幕的标准选项菜单。这在菜单显示之前调用,每次显示。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。
onCreateOptionsMenu()
被调用一次。
每次打开菜单时都会调用 onPrepareOptionsMenu()
。
来自 onCreateOptionsMenu() 文档:
这个只调用一次,第一次选项菜单是 显示。要在每次显示时更新菜单,请参阅 onPrepareOptionsMenu(Menu)。