0

我正在尝试创建一个在使用主题AlertDialog时不使用系统样式默认值的自定义。Theme.Holo.Light.Dialog我希望它使用该主题,但我希望具有与ListActivity使用相同主题相同的样式。不同的类对于同一个主题有不同的风格,所以看来我需要创建一个DialogFragment. 另一个限制是我希望这个对话框是通用的。也就是说,我希望能够有条件地添加按钮、消息、标题、图标和项目。因此,似乎我不能只DialogFragment从 xml 文件中膨胀 a以编程方式构建一个DialogFragment而不从单个 xml 文件中膨胀它?

编辑

看起来这可能会有所帮助:以编程方式将控件添加到自定义对话框

我正在使用这个答案做一些事情:Dynamicly add table row in table and display it in dialog box in android

为什么我使用此代码时按钮不出现?

我在布局中添加的 xml 元素确实出现了。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    return dialog;
}

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View contentView = inflater.inflate(R.layout.post_dialog, container);
    RelativeLayout layout = (RelativeLayout) contentView.findViewById(R.id.post_dialog_layout);

    Button testButton = new Button(getActivity());
    testButton.setText("success");
    testButton.setLayoutParams(new RelativeLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));
    layout.addView(testButton);
    return contentView;
}
4

2 回答 2

-1

您需要的一切都在这里这里。基本上,为了构建对话框的内容,您应该覆盖onCreateView(...),但如果您想对对话框本身进行更多控制,您也可以覆盖onCreateDialog(...)

构建器模式可以帮助和平滑事物,但如果您更喜欢构建自己的东西,您可以 Dialog完全以编程方式构建实例及其内容视图,甚至无需膨胀 XML 并在运行时简单地实例化布局元素。

于 2013-05-31T17:32:46.837 回答
-3

您可以将参数 Bundle 设置为创建的 DialogFragment,然后使用它们来配置您的 Dialog。其中一些可能是可选的,您可以使用它来检测应包含哪个选项对话框(标题、附加按钮、图标)。

import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

import ru.daoffice.R;

public class AlertDialogFragment extends DialogFragment {

    private static final String ARG_TITLE = "ArgTitle";

    private static final String ARG_MESSAGE = "ArgMessage";

    public static DialogFragment newInstance(String title, String message) {
        Bundle argumnets = new Bundle();
        argumnets.putString(ARG_TITLE, title);
        argumnets.putString(ARG_MESSAGE, message);

        DialogFragment dialogFragment = new AlertDialogFragment();
        dialogFragment.setArguments(argumnets);
        return dialogFragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.alert_dialog_icon)
            .setTitle(getArguments().getString(ARG_TITLE))
            .setMessage(getArguments().getString(ARG_MESSAGE))
            .setPositiveButton(android.R.string.ok, null)
            .create();
    }
}
于 2013-05-31T17:45:52.107 回答