我使用下面的代码创建自定义首选项。 xml布局文件包含Button
,EditText
和TextView
。此自定义布局显示在Alert
内,带有“确定”和“取消”按钮。这一切都运作良好。
我想在“确定”和“取消”按钮旁边添加第三个按钮(中性按钮)。我已尝试使用AlertBuilder
课程,但无法弄清楚如何合并我的自定义xml布局和中性按钮。
如何做到这一点?
目前有......
public class MelsMessage extends DialogPreference {
Button bMessage;
EditText eMessage;
TextView tMessage;
public MelsMessage(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
protected View onCreateDialogView() {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
View view = layoutInflater.inflate(R.layout.dialog_pref_mess, null);
//UI elements
bMessage = (Button) view.findViewById(R.id.buttonMessage);
eMessage = (EditText) view.findViewById(R.id.edittextMessage);
tMessage = (TextView) view.findViewById(R.id.textviewMessage);
return view;
}
}
答案 0 :(得分:6)
我看到你的问题有点陈旧了,也许你已经有了问题的答案,但这是一个扩展DialogPreference的类的解决方案。
首先,您必须覆盖 MelsMessage 类中的onPrepareDialogBuilder
方法:
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder)
{
super.onPrepareDialogBuilder(builder);
builder.setNeutralButton("hello", this);
}
this
方法中的 setNeutralButton
是 DialogPreference 类实现的DialogInterface.OnClickListener
接口。
您要做的最后一件事是覆盖 MelsMessage 类中的onClick
方法:
@Override
public void onClick(DialogInterface dialog, int which)
{
super.onClick(dialog, which);
switch (which)
{
case DialogInterface.BUTTON_POSITIVE:
// do things for the right button
break;
case DialogInterface.BUTTON_NEGATIVE:
// do things for the left button
break;
default:
// do things for the center button
break;
}
}
如果你想处理另一个班级中的点击,你所要做的就是在这个班级中实现DialogInterface.OnClickListener
。
希望这会对你有所帮助。欢呼声。
答案 1 :(得分:0)
当您覆盖onCreateDialogView
并且未设置setPositiveButton
和setNegativeButton
时,确定和取消按钮应该消失,不是吗?因为在该方法中,您将覆盖默认布局并设置自定义布局。
如果是这种情况,那么您应该使用3个按钮创建自己的自定义底部布局,并将其添加到膨胀的按钮中。尝试搜索并实现具有所有必要实现的“底部ButtonBar”,因为我没有在文档中看到任何方法或方法来实现像常规Dialog上的中性按钮。
答案 2 :(得分:0)
您可以使用3个按钮创建自定义对话框或编写
等代码Dialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
} });
Dialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancle", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}});
Dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Do Nothing" new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}});