2

我创建了一个扩展类,它在它的 onCreateDialog 方法DialogFragment中返回一个,就像这里一样。 问题是,我想增加标准(正)按钮的高度,但我无法抓住它来改变它的高度。 当我在 onCreateDialog 方法中执行以下操作时AlertDialog

DialogFragment

mAlertDialog = new AlertDialog.Builder(getActivity())
            .setView(messageView)
            .setCustomTitle(titleView)
            .setPositiveButton(R.string.dialog_button,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((ContextSwapUserInterface) getActivity()).instructionsAccepted();
                    }
                }
            )
            .create();

mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60);

我得到一个异常,上面写着“......无法实例化 ComponentInfo......”
我猜这是因为此时 Button 没有正确实例化。
所以我尝试在我的主要活动中获取按钮,在我创建DialogFragment并调用它的 .show 方法之后:

// Create and show a new InstructionsDialogFragment
DialogFragment instructionsDialogFragment = InstructionsDialogFragment.newInstance(mInstructions);
instructionsDialogFragment.show(getFragmentManager(), "Instructions Dialog");
((Button) instructionsDialogFragment.getDialog().findViewById(android.R.id.button1)).setHeight(60);

我还尝试了以下内容,而不是上面的最后一行:

((AlertDialog) instructionsDialogFragment.getDialog()).getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60);

两个版本都会导致 NullPointerException。有没有什么简单的方法可以AlertDialog在使用 时自定义 按钮DialogFragment

4

2 回答 2

4

好的 - 尝试在片段的 onActivityCreated 方法中获取按钮。我为 listfragment 做了这个,但它应该做同样的事情 - 检查你有正确的 ID 等。

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        Button b = (Button)this.getView().findViewById(R.id.buttonID);

        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Button Clicked",  Toast.LENGTH_SHORT).show();
            }
    });
于 2012-05-15T14:58:22.350 回答
2

另一种方法是使用 anonShowListener来修改我遇到同样问题的按钮,并且在显示对话框之前我无法使用 Buttons .show()。我认为 AlertDialog 的 UI 元素不是在之后实例化,builder.create而是在.show().

mAlertDialog.setOnShowListener(new OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60);
        }
    });
于 2013-08-21T13:43:31.827 回答