由于我们平常开发app要兼容5.0以下的手机,所以使用Toolbar必须引用appcompat-v7兼容包,Android studio新建的工程默认是引用了appcompat-v7。
使用Toolbar替代ActionBar,使用的主题必须是没有ActionBar的,否则会造成冲突。因此修改style.xml中主题样式,继承Theme.AppCompat.NoActionBar
这种情况一般发生在你想利用ActionBar现有的一些功能(比如能够显示菜单中的 *** 作项,响应菜单点击事件,使用ActionBarDrawerToggle等),但是又想获得比actionbar更多的控制权限。
那么当前Activity需要继承AppCompatActivity,调用setSupportActionBar方法传入Toolbar的实例对象。
这种情况当前Activity可以不继承AppCompatActivity。
以上步骤完成后,Toolbar就添加到了页面中。
Toolbar在ActionBar原有的设计基础上又将标题栏分为了多个区域,如下从Google找到的一张示例图所示:
大抵来说,配置常用的几个元素就如图中所示:
设置导航按钮,比如作为返回按钮。
在Toolbar当作ActionBar来使用的情况下:
注意setNavigationIcon需要放在 setSupportActionBar之后才会生效。
可以使用ActionBar原有方法来添加一个系统的返回按钮。
可以通过setNavigationOnClickListener设置其点击事件。
设置图标(图中写错了,应该是setLogo)
设置主标题。
在Toolbar当作ActionBar来使用的情况下:
setDisplayShowTitleEnabled需要设置为false,setTitle才能有效。
设置副标题
设置菜单的点击事件,如果Toolbar当作ActionBar来使用的话,还可以直接在onOptionsItemSelected(MenuItem item)中设置。
关于Toolbar的初步使用就这么多,在Toolbar当作ActionBar使用的情况下,能用ActionBar原有方法实现的功能尽量用其方法实现,不能实现的再考虑使用Toolbar的方法,举个例子,像菜单构建设置监听什么的,直接使用Activity提供的方法就好了。
首先需要修改工具栏的扩展风格,改为带向下的箭头m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS)
然后才修改某个具体项的风格,改为下拉式
DWORD dwStyle=m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN))
dwStyle|=TBSTYLE_DROPDOWN
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN),dwStyle)
还需要处理下拉消息
消息定义 afx_msg void OnToolbarDropdown(NMHDR*pnmh,LRESULT*plRes)
消息路由 ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropdown)
void CMainFrame::OnToolbarDropdown(NMHDR*pnmh,LRESULT*plr)
{
//注意,这里VC6和VS2010略有不同
NMTOOLBAR* pnmbar = (NMTOOLBAR*)pnmh
CWnd*pWnd
switch(pnmbar->iItem)
{
case ID_FILE_OPEN:
pWnd=&m_wndToolBar
break
default:
return
}
CMenu menu
menu.LoadMenu(IDR_MENU1)
CMenu*pPopup =menu.GetSubMenu(0)
ASSERT(pPopup)
CRect rc
pWnd->SendMessage(TB_GETRECT,pnmbar->iItem,(LPARAM)&rc)
pWnd->ClientToScreen(&rc)
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rc.left
,rc.bottom,this,&rc)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)