Android:自定义DialogPreference确定/取消按钮

时间:2015-07-08 11:27:02

标签: android android-alertdialog

我无法找到正确修改DialogPreference确定/取消按钮的方法。

我的应用中的所有输入对话框都有以下按钮框:

enter image description here

这是我在DialogPreference

中可以得到的

enter image description here

当然,

不可接受,因为按钮被交换并且中间有一条可怕的线。

我应用更改按钮的方法是Dialog使用showDialog方法并为布局设置背景:

public class RingtonePreference extends DialogPreference
{

    @Override
    protected void showDialog(Bundle state)
    {
        super.showDialog(state);

        Dialog d = getDialog();
        Utils.setAlertDialogButtons(getContext(), (AlertDialog)d, true);
    }

...

static public void setAlertDialogButtons(Context c, final AlertDialog alertDialog, final boolean hasNegative)
{
    try
    {
        int size = (int)c.getResources().getDimension(R.dimen.btn_size);
        TableRow.LayoutParams lp = new TableRow.LayoutParams(size, size);
        lp.setMargins(size/2, 5, size/2, 5);

        Button posBtn = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        LinearLayout tr = (LinearLayout)posBtn.getParent();
        tr.setGravity(Gravity.CENTER);
        tr.setBackgroundResource(R.drawable.fixed_buttons_background);

        posBtn.setText("");
        posBtn.setLayoutParams(lp);
        posBtn.setBackgroundResource(R.drawable.btn_apply_selector);

        if (hasNegative)
        {
            Button negBtn = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
            negBtn.setText("");
            negBtn.setLayoutParams(lp);
            negBtn.setBackgroundResource(R.drawable.btn_back_selector);
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
        Log.e("U", e.getMessage());
    }
}

我放弃了,但在此之前,我在这里寻求帮助。 放弃意味着" 离开原始设置面板" (的可怕):

enter image description here

所以,请,帮助:)

1 个答案:

答案 0 :(得分:0)

  1. 确保您为标准应用屏幕和首选项屏幕使用相同的主题,以获得一致的结果。

  2. 未经测试但应该有效:如果您想更改底部按钮栏的外观,您可以做的是:

    • 覆盖setPositiveButtonText()中的setNegativeButtonText()DialogPreference,使其成为无操作,以便Android不会显示标准"确定"和"取消"按钮栏。

    • 然后在您的覆盖showDialog()方法中,像现在一样检索Dialog后,将其转换为AlertDialog并致电setView()以通过自定义页脚布局。它将显示在列表下方的“确定/取消”按钮的相同位置。