ICS より前の Xperia Play の場合、タッチパッドから入力を取得する唯一の方法は、NativeActivity (単純な古いアクティビティではありません) を使用することです。残念ながら、名前が示すように、NativeActivity でのすべての描画は、Java 側ではなくネイティブ側で行われます。Java 側のグラフィックを使用してネイティブ側で入力を取得するには、NativeActivity の onCreate メソッドに次を追加する必要があります。
getWindow().takeSurface( null );
getWindow().setContentView( R.layout.main );
そして、ネイティブ側からタッチパッドとタッチスクリーンの入力を受け取るために、JNI を介していくつかのメソッドを設定します。その後、タッチパッド入力を取得しながら、Android の Java API を使用して楽しく描画できます。これは、実行中の ICS より前の Xperia Play では非常にうまく機能します。onCreateOptionsMenu でメニューを追加しても問題ありません。
問題は、Xperia Play が ICS を実行しているときに発生します。メニューはアクションバーに移動しました。残念ながら、アクション バーを操作することはできません (3 つのドットを押しても無視され、アクション バーの後ろの面を押しているように動作します)。
違いが生じる場合に備えて、onCreateOptionsMenu を使用してアクション バー メニュー オプションを作成しています。私は Window.FEATURE_ACTION_BAR_OVERLAY を使用しており、ユーザーが「戻る」ボタンを押したときにアクションバーが表示されるようにしています (mSingleton は NativeActivity インスタンスです)。
mSingleton.runOnUiThread(
new Runnable()
{
public void run()
{
if( mSingleton.getActionBar().isShowing() )
mSingleton.getActionBar().hide();
else
mSingleton.getActionBar().show();
}
} );
これにより、アクション バーが表示されますが、前述のように操作できません。アクションバーにフォーカスなどを強制する方法はありますか? 通常のメニューが ICS より前のバージョンで正常に機能するという事実は、アクション バーも別の種類のメニューであるため、アクション バーとの対話も可能であるべきだと考えさせます。