【问题标题】:customizing android toolbar programmatically以编程方式自定义 android 工具栏
【发布时间】:2016-05-19 19:46:52
【问题描述】:

我想在我的项目中使用带有片段的 android v7.toolbar。所以我在我的主要活动 xml 中做了类似下面的事情。因为我不想将所有片段xml添加到android.support.v7.widget.Toolbar

<?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 个右菜单图标和另一个片段 2。我该如何实现?

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

谢谢,

【问题讨论】:

    标签: android android-toolbar


    【解决方案1】:

    您可以创建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。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多