我目前正在尝试使用Xamarin Studio(又名monodroid)构建Android应用。我的问题如下:
在我的活动OnCreate
中,我致电
this.RequestWindowFeature(WindowFeatures.ActionBar);
this.RequestWindowFeature(WindowFeatures.ActionModeOverlay);
另外,我将此覆盖添加到Activity:
public override Boolean OnTouchEvent(MotionEvent e)
{
if (this.ActionBar.IsShowing)
{
this.ActionBar.Hide();
}
else
{
this.ActionBar.Show();
}
return base.OnTouchEvent(e);
}
然而,这并不像我期望的那样工作:当我第一次点击活动时,该栏被隐藏。下一个点击显示它,但它甚至在再次撤退之前甚至没有完全滑入视图。而且,似乎" cram"活动的内容,自我添加WindowFeatures.ActionModeOverlay
以来不应该这样做。
我错过了什么?
修改
我确信该方法本身仅在每次触摸时触发一次(我记录了一个计数器进行诊断)
另外,我不会在其他任何地方show()
/ hide()
使用ActionBar。
编辑2:我确定,但可能搞砸了诊断方法。 :/
添加后
if (e.Action == MotionEventActions.Cancel
|| e.Action == MotionEventActions.Up)
{
return base.OnTouchEvent(e);
}
它的行为符合预期。
答案 0 :(得分:2)
当您发布触摸时,Motion Event正在捕捉事件,您需要使用e.Action
进一步过滤事件以进行触地和释放事件。我认为down是触发show,而release又是隐藏它