将 ActionBar 按钮可见性设置为 GONE

问题描述

我有一个带有一些操作栏按钮的工具栏。我希望相机图标按钮不出现,如果 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)。