0

私は進行状況ダイアログを持っています:

mProgressDialog = new ProgressDialog(WebViewActivity.this);

次のようないくつかのボタンを使用します。

mProgressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
            @Override
             public void onClick(DialogInterface dialog, int which) {
                //some code
            }
         });

そして、私は(そしてNullPointerExceptionを取得して)それらのパラメータを設定しようとしています:

Button cancel = mProgressDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
int width1 = (int) TypedValue.applyDimension
                (TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics());
         **NullPointerException here:** cancel.setLayoutParams(new LinearLayout.LayoutParams
                 (width1, LayoutParams.MATCH_PARENT, 1f));

では、ここでボタンのレイアウト パラメータを設定するにはどうすればよいでしょうか (カスタム プログレス ダイアログを使用せずに)。カスタム進行状況ダイアログを使用する代わりに、それらをまったく設定できないと何かが教えてくれます...

PS:ここで非常に単純なものが欠けている場合は申し訳ありません

4

2 に答える 2

1

ボタンは、Dialog.onCreate() の後にダイアログにインストールされます。したがって、このメソッドをオーバーライドしてここにコードを追加するか、Dialog.show() が呼び出された後にボタンを取得する必要があります。

これが私のサンプルです。最初のボタンの重みを変更しました。

    ProgressDialog dialog = new ProgressDialog(this);
    dialog.setButton(AlertDialog.BUTTON_POSITIVE, "confirm",
            (DialogInterface.OnClickListener) null);
    dialog.setButton(AlertDialog.BUTTON_NEGATIVE, "cancel",
            (DialogInterface.OnClickListener) null);
    dialog.show();
    Button btConfirm = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) btConfirm
            .getLayoutParams();
    params.weight = 3;
于 2012-12-11T16:36:32.237 に答える
1

ここで、ビルダーを使用した AlertDialog のコード

            AlertDialog.Builder builder = new AlertDialog.Builder(Setup.this);
            builder.setMessage("Message", 1))
            .setPositiveButton(getString(R.string.browseonlinesupport), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
            })
            .setNeutralButton(getString(R.string.submit_help_request), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
                }
            })
            .setNegativeButton(getString(R.string.cancel), null) // to make the button even widths
            //.show()
            ;
            //                }
            AlertDialog helpDialog = builder.create();
            helpDialog.show();  // call show() must from dialog not builder, otherwise button not created and getButton is null
            LinearLayout.LayoutParams btParams;
            Button btPositive = helpDialog.getButton(AlertDialog.BUTTON_POSITIVE);
            btParams = (LinearLayout.LayoutParams) btPositive.getLayoutParams();
            btParams.weight = 1;
            btParams.width = btParams.MATCH_PARENT;

            Button btNegative = helpDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
            btParams = (LinearLayout.LayoutParams) btNegative.getLayoutParams();
            btParams.weight = 1;
            btParams.width = btParams.MATCH_PARENT;

            Button btNeutral = helpDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
            btParams = (LinearLayout.LayoutParams) btNeutral.getLayoutParams();
            btParams.weight = 1;
            btParams.width = btParams.MATCH_PARENT;

*、show() はビルダーではなくダイアログから呼び出す必要があります。そうしないと、ボタンが作成されず、getButton が null になります

于 2013-09-18T21:56:09.420 に答える