すみません、私も詳しくないので中途半端ですが、以下のようなコードで
画面の中央にボタンを表示することができました
Javaコード
public class MainActivity extends NativeActivity {
public NativeActivity _activity;
PopupWindow popUp;
LinearLayout layout;
LinearLayout mainLayout;
Button button;
public void PopupWindowTest()
{
_activity = this;
// UIスレッドで実行する処理を登録する
runOnUiThread(
new Runnable() {
// UIスレッドで呼ばれる関数
@Override
public void run() {
layout = new LinearLayout(_activity);
mainLayout = new LinearLayout(_activity);
button = new Button(_activity);
popUp = new PopupWindow(_activity);
layout.addView(button);
popUp.setContentView(layout);
popUp.showAtLocation(mainLayout, Gravity.CENTER, 0, 0);
popUp.update();
}
}
);
};
}
C++ コード
#include "DxLib.h"
int android_main( void )
{
JNIEnv *env ;
const ANativeActivity *NativeActivity ;
// 背景を灰色にする
SetBackgroundColor( 128,128,128 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// アプリの NativeActivity を取得しておく
NativeActivity = GetNativeActivity() ;
// Java の関数 PopupWindowTest の呼び出し
{
// JavaVM とソフト実行用スレッドを関連付け( C++ から Java の機能を使用するために必要 )
if( NativeActivity->vm->AttachCurrentThreadAsDaemon( &env, NULL ) != JNI_OK )
{
return -1 ;
}
// Java のクラス MainActivity を取得
jclass jclass_MainActivity = env->GetObjectClass( NativeActivity->clazz ) ;
// Java のクラス MainActivity のメンバー関数 PopupWindowTest の ID を取得
jmethodID jmethodID_PopupWindowTest = env->GetMethodID( jclass_MainActivity, "PopupWindowTest", "()V" ) ;
// Java のクラス MainActivity のメンバー関数 PopupWindowTest の呼び出し
env->CallVoidMethod( NativeActivity->clazz, jmethodID_PopupWindowTest ) ;
// Java のクラス MainActivity の参照を削除
env->DeleteLocalRef( jclass_MainActivity ) ;
// JavaVM とソフト実行用スレッドの関連付け終了
NativeActivity->vm->DetachCurrentThread() ;
}
// メインループ
while( ProcessMessage() == 0 )
{
// 裏画面の内容をクリア
ClearDrawScreen() ;
// 動作確認用に TestString という文字列を描画する
DrawString( 0, 100, "TestString", GetColor( 255,255,255 ) ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
NativeActivity の場合は onCreate が呼ばれないので、C++ のコードから Javaの関数を呼び出し、
その中でポップアップウィンドウ内にボタンを配置して表示しています
あと、C++ から呼ばれるJavaの関数内では画面表示に関するAPIが呼べないので、runOnUiThread ... 以下の
記述で画面表示に関するAPIが呼べるスレッド上で実行される関数内で new PopupWindow(_activity); などを実行します
あと、NativeActivity は this.setContentView が効果が無いようなので、ポップアップウィンドウを
使用してボタンを表示しています
よろしければお試しください m(_ _)m