TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
……
//打印日志aType iRepeats:
switch (aKeyEvent.iCode)
{
case EKeyUpArrow:
{
//按键处理
break;
}
case EKeyDownArrow:
{
//按键处理
break;
}
}
……
}
短按键日志信息:
EEventKeyDown iRepeats:0
EEventKey iRepeats:0
EEventKeyUp iRepeats:0
长按键日志信息:
EEventKeyDown iRepeats:0
EEventKey iRepeats:0 //第一次会走短按键处理
EEventKey iRepeats:1
EEventKey iRepeats:1
……
EEventKey iRepeats:1
EEventKeyUp iRepeats:0
方案:上下键延迟到弹起时处理。
TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
……
if (EEventKeyUp == aType && iKeyEvent.iRepeats == 0)
{
if (iKeyEvent.iCode == EKeyUpArrow)
{
HandleUpArrowEventL(iKeyEvent, EEventKey);
}
if (iKeyEvent.iCode == EKeyDownArrow)
{
HandleDownArrowEventL(iKeyEvent, EEventKey);
}
}
//增加成员变量iKeyEvent,保存上一次aKeyEvent。
iKeyEvent = aKeyEvent;
switch (aKeyEvent.iCode)
{
case EKeyUpArrow:
{
if (aKeyEvent.iRepeats == 1)
{
//长按键处理
}
break;
}
case EKeyDownArrow:
{
if (aKeyEvent.iRepeats == 1)
{
//长按键处理
}
break;
}
//其它键处理不变
}
……
}
但是有些手机iRepeats不同
E52手机 长按键日志信息:
EEventKeyDown iRepeats:0
EEventKey iRepeats:0
EEventKey iRepeats:0
EEventKey iRepeats:536975507
EEventKey iRepeats:536975507
……
EEventKey iRepeats:536975507
EEventKeyUp iRepeats:536975507
6700s手机iRepeats始终为0
解决方法:
TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
……
if ((EEventKeyUp == aType) || (EEventKeyDown == aType))
{
iKeyEventNum = 0;
}
else
{
iKeyEventNum++;
}
TKeyEvent keyEvent = aKeyEvent;
if (3 <= iKeyEventNum)
{
keyEvent.iRepeats = 1;
iKeyEventNum = 3;
}
if (EEventKeyUp == aType && iKeyEvent.iRepeats == 0)
{
if (iKeyEvent.iCode == EKeyUpArrow)
{
HandleUpArrowEventL(iKeyEvent, EEventKey);
}
if (iKeyEvent.iCode == EKeyDownArrow)
{
HandleDownArrowEventL(iKeyEvent, EEventKey);
}
}
//增加成员变量iKeyEvent
iKeyEvent = keyEvent;
switch (keyEvent.iCode)
{
case EKeyUpArrow:
{
if (keyEvent.iRepeats == 1)
{
//长按键处理
}
break;
}
case EKeyDownArrow:
{
if (keyEvent.iRepeats == 1)
{
//长按键处理
}
break;
}
//其它键处理不变
}
……
}
4123

被折叠的 条评论
为什么被折叠?



