无法更改alertdialog的标题和分隔符的颜色

时间:2014-11-27 16:55:51

标签: android android-alertdialog

我不明白为什么我会得到NPE ...... 这是我的代码:

    public void showSettingsAlert(){

    AlertDialog.Builder alertdialog = new AlertDialog.Builder(mcontext);
    alertdialog.setTitle("Oups ! pas de données GPS");
    alertdialog.setMessage("GPS n'est pas activé sur votre appareil, voulez vous l'activer ?");

    /*
    handling the buttons :
     */
    alertdialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            mcontext.startActivity(intent);


        }
    });

    // on pressing cancel button
    alertdialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    Dialog d = alertdialog.show();
    int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
    int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
    View divider = d.findViewById(dividerId);

    // the next line is where i get the NPE :

divider.setBackgroundColor(getResources().getColor(R.color.main_green));
    TextView tv = (TextView) d.findViewById(textViewId);
    tv.setTextColor(getResources().getColor(R.color.main_green));

    alertdialog.show();

}

感谢您的帮助:)

PS:颜色main_green确实存在,我已经在其他地方使用它并且有效。

1 个答案:

答案 0 :(得分:0)

如果我没错,你应该在这里使用AlertDialog而不是Dialog:

Dialog d = alertdialog.show(); //Use AlertDialog instead

此外,您无需在方法结束时再次致电show();

修改

我刚看到第一次阅读你的代码时错过了一些东西。请替换这个:

AlertDialog d = alertdialog.show();
int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
View divider = d.findViewById(dividerId); 

用这个:

AlertDialog d = alertdialog.show();
int dividerId = mcontext.getResources().getIdentifier("android:id/titleDivider", null, null);
int textViewId = mcontext.getResources().getIdentifier("android:id/alertTitle", null, null);
View divider = d.findViewById(dividerId);

dividerId为null,因为您提供错误的Context来获取值。或者,如果您的代码位于Activity内,则可以删除mcontext部分并执行:

getResources().getIdentifier()... etc