HSP tips

とりあえずここも暫定ページです。

[HSP3Dish] [Android] ダイアログボタンの文字列を HSP側から自由に設定


標準ではボタンの文字は OK, Yes, No で固定されていますが、これをHSPコードから自由に変更できるようにします。 ただし、この改造によりダイアログのタイトルが使用できなくなり、Windows との互換性は失われますのでご注意ください。 ようするに、タイトル用の文字列をボタンに転用するやり方です。 (split を使って、タイトル, ボタン1, ボタン2 ... と書けるようにすればタイトルもいけますが、個人的には不要だったので実装してません。)


HspActivity.java のダイアログ部分を以下に置き換えてください。 (これには HSP 3.5β2 の時点でのバグフィックスも含まれています。)

  // 実行プラットフォームの改行コードを取得
  private static final String BR = System.getProperty("line.separator");

    public int ui_dispDialog( String msg1, String msg2, int type ) {

	msg1 = msg1.replaceAll("\r\n",BR);	// 改行置換

	// OKダイアログ
	final String s_msg1;
	final String s_msgbtn1;
	final HspActivity myActivity;

	myActivity = this;
	s_msg1    = msg1;
	s_msgbtn1 = msg2;

	this.runOnUiThread( new Runnable()
		{
	        @Override
	        public void run()
	        {
			AlertDialog.Builder alert = new AlertDialog.Builder(myActivity);
			alert.setMessage( s_msg1 );
	        	alert.setPositiveButton( s_msgbtn1, new DialogInterface.OnClickListener()
	        	{
			@Override
			public void onClick(DialogInterface dialog, int which)
			{
				nativepoke( 0, 1 );
			}
		    });
			// ダイアログ外で閉じた場合
			alert.setOnCancelListener(new DialogInterface.OnCancelListener()
			{
			@Override
			public void onCancel(DialogInterface dialog)
			{
				nativepoke( 0, 0 );
			}
	            });
	        	alert.create().show();
	        }
	    } );

   	return 0;
    }

    public int ui_dispDialogYN( String msg1, String msg2, int type ) {

	msg1 = msg1.replaceAll("\r\n",BR);	// 改行置換
	String[] msgbtn = msg2.split(",", 0);	// ボタンの文字列を分割

	// YES/NOダイアログ
	final String s_msg1;
	final String s_msgbtn1;
	final String s_msgbtn2;
	final HspActivity myActivity;

	myActivity = this;
	s_msg1    = msg1;
	s_msgbtn1 = msgbtn[0];
	s_msgbtn2 = msgbtn[1];

	this.runOnUiThread( new Runnable()
		{
	        @Override
	        public void run()
	        {
			AlertDialog.Builder alert = new AlertDialog.Builder(myActivity);
			alert.setMessage( s_msg1 );
	        	alert.setPositiveButton( s_msgbtn1, new DialogInterface.OnClickListener()
	        	{
			@Override
			public void onClick(DialogInterface dialog, int which)
			{
				nativepoke( 0, 6 );
			}
		    });
	        	alert.setNegativeButton( s_msgbtn2, new DialogInterface.OnClickListener()
	        	{
	                @Override
	                public void onClick(DialogInterface dialog, int which)
	                {
	                	nativepoke( 0, 7 );
	                }
	            });
			// ダイアログ外で閉じた場合
			alert.setOnCancelListener(new DialogInterface.OnCancelListener()
			{
			@Override
			public void onCancel(DialogInterface dialog)
			{
				nativepoke( 0, 0 );
			}
	            });
	        	alert.create().show();
	        }
	    } );

   	return 0;
    }

HSP側は、以下のように書きます。

#include "hsp3dish.as"

	dialog "これは、OKダイアログです。",0,"閉じる"
	dialog "ボタンなしです。",0,""
	dialog "Yes/Noダイアログです。\n各ボタンの文字列は \",\" で区切ります。",2,"はい,いいえ"
	dialog "アプリを終了します。",0,"OK"
	end



戻る

© 1998-2015 Miecat. All rights reserved.