以编程方式自定义android工具栏

时间:2016-05-19 19:46:53

标签: android android-toolbar

我想在我的项目中使用android v7.toolbar和片段。所以我在我的主要活动xml中做了类似下面的事情。因为我不想将所有片段xml添加到<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:id="@+id/toolBar" /> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fragment_container"> </FrameLayout> </LinearLayout>

{{1}}

我正在以编程方式添加片段。在某些片段中,我必须更改工具栏的右侧。例如,在某些片段中,我只需要使用1个右侧菜单图标和另一个片段2.我如何实现它?

还有办法从片段中更改工具栏右侧的图标资源吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

您可以创建menu.xml并将所有菜单项放入其中。将所有项visibility设置为false。这隐藏了一切。

然后在您的片段onCreate设置setHasOptionsMenu(true)中,这将允许您覆盖onCreateOptionsMenu(Menu m, MenuInflater inflater)

在此方法中,您可以执行menu.findItem(id.of.item).setVisible(true/false)

示例:

menu.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="com.sample.app.MainActivity">    
    <item
        android:id="@+id/action_refresh"
        android:icon="@drawable/ic_action_refresh"
        android:orderInCategory="101"
        app:showAsAction="ifRoom"
        android:title="@string/action_refresh"
        android:visible="false"/>
    <item
        android:id="@+id/action_edit_account"
        android:icon="@drawable/ic_action_edit"
        android:orderInCategory="102"
        app:showAsAction="never"
        android:title="@string/action_edit_account"
        android:visible="false"/>
    <item
        android:id="@+id/action_enable_offline_token"
        android:orderInCategory="105"
        app:showAsAction="never"
        android:title="@string/action_enable_offline_token"
        android:visible="false"/>
    <item
        android:id="@+id/action_disable_offline_token"
        android:orderInCategory="105"
        app:showAsAction="never"
        android:title="@string/action_disable_offline_token"
        android:visible="false"/>
    <item
        android:id="@+id/action_save"
        android:icon="@drawable/ic_action_save"
        android:orderInCategory="106"
        app:showAsAction="ifRoom"
        android:title="@string/action_save"
        android:visible="false"/>
</menu>

片段:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);            
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        super.onCreateOptionsMenu(menu, inflater);        
        menu.findItem(R.id.action_refresh).setVisible(false);
        menu.findItem(R.id.action_save).setVisible(true);
    }

要更改图标,您只需获取菜单并执行findItem和setIcon。