我正在尝试创建一个自定义AlertDialog
,它在使用Theme.Holo.Light.Dialog
主题时不使用系统样式默认值。我希望它使用该主题,但我希望与ListActivity
使用相同主题的样式相同。不同的类对于同一主题具有不同的样式,因此看起来我需要创建DialogFragment
的子类。另一个限制是我希望这个对话框是通用的。也就是说,我希望能够有条件地添加按钮,消息,标题,图标和项目。因此,似乎我不能只是从xml文件中膨胀DialogFragment
(或者如果我可以创建我想要的所有可能元素,然后隐藏那些我不想要的元素,我可以是否可以以编程方式构建DialogFragment
而不将其从单个xml文件中膨胀?
修改
看起来这可能会有所帮助:Add controls to custom dialog programatically
我正在使用这个答案开展工作:Dynamically 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;
}
答案 0 :(得分:-1)
您需要的一切都是here和here。基本上,为了构建对话框的内容,您应该覆盖onCreateView(...)
,但如果您想要更多地控制Dialog本身,您也可以覆盖onCreateDialog(...)
。
构建器模式可以帮助和平滑事物,但如果您更喜欢构建自己的东西,您可以完全以编程方式构建Dialog
实例及其内容视图,甚至不会夸大XML并简单地实例化布局元素在运行时。
答案 1 :(得分:-2)
您可以将参数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();
}
}