アラート ダイアログのタイトルの背景をカスタマイズしたいのですが、アラート ダイアログが表示されずにアプリがクラッシュします。(カスタム ビューは、タイトル パネルとボタン パネルを除くメッセージ領域のみを埋めます。デフォルトのタイトル パネルとボタン パネルをカスタマイズしたいです。ここでは、タイトルを例に挙げます。)
public static class MyAlertDialog
{
private static AlertDialog _alertDialog;
public static void Show(Context context)
{
var factory = LayoutInflater.From(context);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context)
.SetTitle("myTitle")
.SetView(factory.Inflate(Resource.Layout.DialogRegister, null))
.SetCancelable(true);
_alertDialog = alertDialogBuilder.Create();
var titleView = (TextView)_alertDialog.FindViewById(Android.Resource.Id.Title); //get title view from the Android resource not from my custom view
//titleView.SetBackgroundResource(Resource.Color.PrimaryColor);
titleView.SetBackgroundColor(Android.Graphics.Color.Red);
_alertDialog.Show();
}
}
メイン アクティビティからダイアログを呼び出します。
[Activity(Label = "My Activity", MainLauncher = true)]
public class HomeActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.home);
Button btnMyButton = FindViewById<Button>(Resource.Id.MyButton);
btnMyButton.Click += (object sender, EventArgs e) =>
{
MyAlertDialog.Show(this);
};
......
}
}
VS が実行時例外をスローし、中断するか続行するかを尋ねます。続行をクリックします。その後、アプリがクラッシュします。ログ:
03-09 11:10:47.057 E/mono ( 1185): [0x4001f730:] EXCEPTION handling: Android.Util.AndroidRuntimeException: Exception of type 'Android.Util.AndroidRuntimeException' was thrown.
03-09 11:10:49.956 I/Email ( 451): ReconcilePopImapAccountsSync: start
03-09 11:10:50.276 I/Email ( 451): ReconcilePopImapAccountsSync: done
03-09 11:11:07.417 E/mono ( 1185): [0x4001f730:] EXCEPTION handling: Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown.
03-09 11:11:07.727 E/mono ( 1185): [0x4001f730:] EXCEPTION handling: Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown.
03-09 11:11:16.846 F/ ( 1185): * Assertion: should not be reached at /Users/builder/data/lanes/monodroid-lion-bigsplash/0e0e51f9/source/mono/mono/mini/debugger-agent.c:5980
03-09 11:11:16.846 I/mono ( 1185): Stacktrace:
03-09 11:11:16.846 I/mono ( 1185):
03-09 11:11:16.866 E/mono ( 1185): [0x2a118c70:] EXCEPTION handling: System.NullReferenceException: Object reference not set to an instance of an object
03-09 11:11:16.906 E/mono ( 1185):
03-09 11:11:16.906 E/mono ( 1185): Unhandled Exception:
03-09 11:11:16.906 E/mono ( 1185): System.NullReferenceException: Object reference not set to an instance of an object
03-09 11:11:16.937 I/mono ( 1185): [ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
Android 4.1.2 armeabi-v7a のエミュレーターでテストします。(このプロジェクトは、armeabi、armeabi-v7a、および x86 アーキテクチャをサポートするように設定されています。)
助けてくれてありがとう。(メッセージ付きのタイトルをカスタム コンテンツ ビューに配置できることはわかっていますが、他の部分もカスタマイズしたいので、例としてタイトルを取り上げます。)
SetTitle("myTitle") でも、titleView.text が空の文字列になっていることに気付きました。デフォルトのタイトルビューを取得するのは間違っていましたか
var titleView = (TextView)_alertDialog.FindViewById(Android.Resource.Id.Title);
繰り返しますが、私のカスタム ビューにはタイトル ビューが含まれていません。