贴2段代码供LZ参考一下:
1.在头文件增加如下代码:
public:
void onFocusChanged(cocos2d::ui::Widget* widgetLostFocus, cocos2d::ui::Widget* widgetGetFocus);
void onKeyboardReleased(cocos2d::EventKeyboard::KeyCode, cocos2d::Event*);
protected:
cocos2d::ui::Widget *_widget;
cocos2d::EventListenerFocus *_eventListener;
cocos2d::EventListenerKeyboard* _keyboardListener;
```
2.在cpp中增加如下代码
/* ==============test============== */
LinearLayoutParameter *layoutParams = LinearLayoutParameter::create();
layoutParams->setMargin(Margin(59,40,0,0));
HBox *layoutHeader = HBox::create();
// layoutHeader->setLoopFocus(true);
layoutHeader->setLayoutParameter(layoutParams);
layoutHeader->setFocused(true);
_widget = layoutHeader;
/* ==============test============== */
//register focus event
_eventListener = EventListenerFocus::create();
_eventListener->onFocusChanged = CC_CALLBACK_2(RotateLayer::onFocusChanged, this);
_eventDispatcher->addEventListenerWithFixedPriority(_eventListener, 1);
//register the keyboard event
_keyboardListener = EventListenerKeyboard::create();
_keyboardListener->onKeyReleased = CC_CALLBACK_2(RotateLayer::onKeyboardReleased, this);
_eventDispatcher->addEventListenerWithFixedPriority(_keyboardListener, 2);
this->setTouchEnabled(true);
this->setTouchMode(Touch::DispatchMode::ALL_AT_ONCE);
void RotateLayer::onKeyboardReleased(EventKeyboard::KeyCode keyCode, Event* e)
{
if (keyCode == EventKeyboard::KeyCode::KEY_DPAD_DOWN) {
MessageBox("down", "pressed");
}
else if (keyCode == EventKeyboard::KeyCode::KEY_DPAD_UP) {
MessageBox("up", "pressed");
}
}
void RotateLayer::onFocusChanged(cocos2d::ui::Widget *widgetLostFocus, cocos2d::ui::Widget *widgetGetFocus)
{
Layout *getLayout = dynamic_cast(widgetGetFocus);
if (!getLayout && widgetGetFocus) {
widgetGetFocus->setScale(1.2);
widgetGetFocus->setColor(Color3B::RED);
}
Layout *loseLayout = dynamic_cast(widgetLostFocus);
if (!loseLayout && widgetLostFocus) {
widgetLostFocus->setScale(1.0);
widgetLostFocus->setColor(Color3B::WHITE);
}
}
```