Fragment中使用工具栏总结

来源:互联网 发布:万网域名绑定非80端口 编辑:程序博客网 时间:2024/06/05 20:01

一、关于ActionBar

如果主Activity的每个Fragment都需要自己的ActionBar,可以将ActionBar的加载放置到各Fragment中

ActionBar的menu加载放到各个独立的Fragment中,每个fragment可以选择自己的menu配置;

@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {    inflater.inflate(R.menu.fragactbar_frag2,menu);    super.onCreateOptionsMenu(menu, inflater);}

同时,需要在fragment中配置actionbar可先的属性:

setHasOptionsMenu(true);

如果不设置这个属性,fragment中的onCreateOptionsMenu()回调不会被执行!

关于fragment中actionbar操作项的点击回调;

默认情况下 加载fragment的主activity会先回去的点击响应,再传递给子fragment;

可以在

public boolean onOptionsItemSelected(MenuItem item) {...}

中捕捉点击响应;

具体的代码
http://download.csdn.net/detail/yfloctar/9517889

二、关于Toolbar

有两种使用Toolbar的方式:

  • Use a Toolbar as an Action Bar when you want to use the existing Action Bar facilities (such as menu inflation and selection, ActionBarDrawerToggle, and so on) but want to have more control over its appearance.

  • Use a standalone Toolbar when you want to use the pattern in your app for situations that an Action Bar would not support; for example, showing multiple toolbars on the screen, spanning only part of the width, and so on.

(1)将Toolbar当作actionbar来使用。这种情况一般发生在你想利用actionbar现有的一些功能(比如能够显示菜单中的操作项,响应菜单点击事件,使用ActionBarDrawerToggle等),但是又想获得比actionbar更多的控制权限。

(2)将Toolbar当作一个独立的控件来使用,这种方式又名Standalone。

Action Bar

如果你要将Toolbar当作actionbar来使用,你首先要去掉actionbar,最简单的方法是使用Theme.AppCompat.NoActionBar主题。

或者是设置主题的属性android:windowNoTitle为true

    <style name="AppTheme.Base" parent="Theme.AppCompat">      <item name="windowActionBar">false</item>      <item name="android:windowNoTitle">true</item>    </style>

然后在xml中:

    <android.support.v7.widget.Toolbar        android:id=”@+id/my_awesome_toolbarandroid:layout_height=”wrap_content”        android:layout_width=”match_parent”        android:minHeight=”?attr/actionBarSizeandroid:background=”?attr/colorPrimary” />

Toolbar的高度、宽度、背景颜色等等一切View的属性完全取决于你,这都是因为Toolbar本质上只是个ViewGroup。然后在activity或者Fragment中将Toolbar设置成actionbar:

    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.blah);        Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);        setSupportActionBar(toolbar);    }

至此,所有的menu菜单元素都会显示在你的Toolbar上,并且响应标准的菜单回调。

Standalone

将Toolbar当作一个独立的控件来使用是不需要去掉actionbar的(两者可以共存),可以使用任意主题。但是在这种情况下,menu菜单并不会自动的显示在Toolbar上,Toolbar也不会响应菜单的回调函数,如果你想让menu菜单项显示在Toolbar上,必须手动inflate menu。

    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.blah);        Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);        // Set an OnMenuItemClickListener to handle menu item clicks        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {            @Override            public boolean onMenuItemClick(MenuItem item) {                // Handle the menu item                return true;            }        });        // Inflate a menu to be displayed in the toolbar        toolbar.inflateMenu(R.menu.your_toolbar_menu);    }
0 0
原创粉丝点击