当前位置: 代码迷 >> 综合 >> tool bar支持按end键后弹出,再按end键后缩回
  详细解决方案

tool bar支持按end键后弹出,再按end键后缩回

热度:23   发布时间:2024-01-19 20:25:27.0
1. 在Vfx_page.cpp文件中定义全局变量 
//mtk added 
VfxBool g_isHiddenToolbar = true; 
 
2, 修改adjustClient函数,用#if 1标注 
void VfxPage::adjustClient() 

 VfxFrame *f = getParentFrame(); 
 if(m_pageFlags & FLAGS_IS_TRANSLUCENT) 
 { 
 if(m_pageFlags & FLAGS_IN_IME_LAYOUT) 
 return; 
  
 VFX_MC_TRACE5(VFX_FUNC, TRC_VFX_F5FD630A0FA44B6990DD4AC43AE75B29,  
"[VfxPage](%x) adjustClient(%d,%d,%dx%d)", this, 0, 0, f->getSize().width, f->getSize().height); 
 setPos(0, 0); 
 setSize(f->getSize()); 
 } 
 else 
 { 
 VfxS32 barH; 
 VfxRect client; 
 VfxSize s; 
 VfxPoint t; 
 if(f->isKindOf(VFX_OBJ_CLASS_INFO(VfxMainScr))) 
 { 
 client = ((VfxMainScr*)f)->getClient(this); 
 } 
 else if(f->isKindOf(VFX_OBJ_CLASS_INFO(VfxPage))) 
 { 
 client = ((VfxPage*)f)->getPageRect(); 
 } 
 else 
 { 
 client.size = f->getSize(); 
 client.origin.x = 0; 
 client.origin.y = 0; 
 } 
  
 s = client.size; 
 t = client.origin; 
 barH = m_topBar->getSize().height; 
 t.y += barH; 
 s.height -= barH; 
 barH = m_bottomBar->getSize().height; 
 if(m_pageFlags & FLAGS_IN_IME_LAYOUT) 
 { 
 VfxS32 *imeOffset = (VfxS32*)getAttachProperty(VFX_PAGE_PROP_ID_IMEOFFSET, sizeof(VfxS32)); 
 VfxS32 imeH = client.size.height - (*imeOffset); 
 if(barH < imeH) 
 barH = imeH; 
 } 
 //mtk added 
 #if 1 
 if(!g_isHiddenToolbar)  
 s.height -= barH; 
 #else 
 s.height -= barH; 
 #endif 
 VFX_MC_TRACE5(VFX_FUNC, TRC_VFX_F5FD630A0FA44B6990DD4AC43AE75B29,  
"[VfxPage](%x) adjustClient(%d,%d,%dx%d)", this, t.x, t.y, s.width, s.height); 
  
 setRect(VfxRect(t, s)); 
 } 

3. VfxPage::Bar::reposistionBar方法,用#if 1标注 
void reposistionBar(VfxPageBar *bar, VfxPageBarLocationEnum loc, VfxBool noAnimation = VFX_FALSE) 
 { 
 VfxPage *page = VFX_OBJ_DYNAMIC_CAST(bar->getParent(), VfxPage); 
 VFX_ASSERT(page); 
  
 VfxFrame *f = page->getParentFrame(); 
 VfxMainScr *scr = page->getMainScr(); 
 if(bar->getParentFrame() != f) 
 f->addChildFrame(bar); 
 VfxRect client; 
 if(f == scr) 
 { 
 client = scr->getClient(page); 
 } 
 else 
 { 
 client.size = f->getSize(); 
 client.origin = VfxPoint(0, 0); 
 } 
 VfxSize barSize = bar->getSize(); 
 if(noAnimation) 
 { 
 VfxAutoAnimate::begin(); 
 VfxAutoAnimate::setDisable(VFX_TRUE); 
 } 
 // adjust size 
 barSize.width = client.size.width; 
 bar->setSize(barSize); 
 // adjust position  
 if(loc == VFX_PAGE_BAR_LOCATION_TOP) 
 bar->setPos(client.origin.x, client.origin.y); 
 else if(loc == VFX_PAGE_BAR_LOCATION_BOTTOM) 
 { 
 #if 1 
 if(g_isHiddenToolbar) 
 bar->setPos(client.origin.x, client.origin.y + client.size.height); 
 else 
 bar->setPos(client.origin.x, client.origin.y + client.size.height - barSize.height); 
 #else 
 bar->setPos(client.origin.x, client.origin.y + client.size.height - barSize.height); 
 #endif 
 } 
 if(noAnimation) 
 { 
 VfxAutoAnimate::commit(); 
 } 
 bar->setLoc(loc); 
 bar->setRotate(page->getRotate()); 
 } 
 
4. 修改VfxPage::onKeyInput的默认实现,用#if 1标注 
VfxBool VfxPage::onKeyInput(VfxKeyEvent &event) 

 if (event.keyCode == VFX_PAGE_KEY_BACK && 
 event.type == VFX_KEY_EVENT_TYPE_DOWN) 
 { 
 back(); 
 return VFX_TRUE; 
 } 
#if 1 
 if (event.keyCode == VFX_KEY_CODE_END && event.type == VFX_KEY_EVENT_TYPE_DOWN) 
 { 
 g_isHiddenToolbar = !g_isHiddenToolbar; 
 //toggleBar(VFX_PAGE_BAR_LOCATION_BOTTOM, g_isHiddenToolbar); 
 reposistionBars(VFX_FALSE); 
 return VFX_TRUE; 
 } 
#endif 
  
 return VfxControl::onKeyInput(event); 
}
 
 
另外,如果不用做弹上弹下的动画,那么前面的2,3步均可不做修改。可以在onKeyInput里面,把call reposistionBars换成call toggleBar。 
  相关解决方案