Я подозреваю, что когда вы говорите, что «можете сделать одно или оба, но не то и другое», вы имеете в виду, что если вы переопределите onKeyUp, вы не увидите onKeyLongPress? Если так, то это потому, что ключевые события долгого нажатия также проходят через onKeyUp (возможно, до того, как они попадут в onKeyLongPress), и вы возвращаете true, чтобы сказать, что ваш код обработал его - следовательно, он никогда не попадет в onKeyLongPress.
В документах сказано, что
"Каждое нажатие клавиши описывается последовательностью событий клавиши. Нажатие клавиши начинается с события клавиши с ACTION_DOWN. Если клавиша удерживается достаточно долго, чтобы она повторялась, то после начального нажатия следуют дополнительные события клавиши с ACTION_DOWN и ненулевое значение для getRepeatCount (). Последнее ключевое событие - это ACTION_UP для повышения ключа. "
Поэтому, если вы хотите различать короткое нажатие меню и длинное нажатие меню, вам также придется отслеживать onKeyDown и различать несколько ACTION_DOWN.