关于如何自定义AlertDialog的标题、内容以及按钮

要更改对话框中的标题颜色,google没有提供具体的方法,可以通过AlertController类,该类就是AlertDialog的实现类,它并没有对外开放,在这个类中有一个私有成员变量叫mTextview,这个就是AlertDialog的title的TextView,所以只要得到这个成员变量的实例,即可自定义AlertDialog的title

(AlertDialog中的mAlert(AlertController); mAlert中的mTextView(Textview))

对涉及到的类进行概述:

1.Field(字段;变量)

这个类表示一个字段,可以访问该字段的信息,并且可以动态的访问字段的值。

涉及到的方法:

get(Object obj)à返回指定对象中字段的值

setAccessible(boolean flag)à设置是否可用

2.Object

Java类层次的根类,所有的非原始类型的类都继承了该类或者该类的子类。

涉及到的方法:

getClass()à返回这个对象的类的唯一实例(Class)

getDeclaredField(String name)à返回一个字段对象(成员变量)

,该字段带有指定的名称,在该类所表示的类中声明;(返回值Field)

       -----name请求字段的名称

       -----Field该类所表示的类中的请求变量

 

源:

   AlertDialog dialog=new AlertDialog.Builder(this,R.style.DialogStyle)

        .setTitle("设置小车动作").setView(mView)//设置标题与View
        .setNegativeButton("取消",null)
        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialogInterface, int i) {
                 String idContent=carId.getText().toString().trim();
                 String usernameContent=userName.getText().toString().trim();
                 if (limitId(idContent,4,new String[]{"请输入小车ID","小车的ID:1-4"})){
                     String mAction=carType.getText().toString().trim();
                     String strurl=strUrl01+"SetCarAction.do";
                     String strJosn="{\"CarId\":"+Integer.parseInt(idContent)
                             +",\"CarAction\":\""+mAction
                             +"\",\"UserName\":\""+usernameContent
                             +"\"}";
                     hThread.setUrl(strurl);
                     hThread.setJson(strJosn);
                     hThread.start();
        }
    }
}).create();
dialog.show();
注意:AlertDialog.Builder中的一些setXXX()返回的均是AlertDialog.Builder对象,而create()方法返回的是一个AlertDialog对象。以下这些操作只能建立在AlertDialog的基础上进行操作而且也要在调用show()方法之后才能进行。
1.改变对话框标题的颜色
try{
    Field mAlert=AlertDialog.class.getDeclaredField("mAlert");
    mAlert.setAccessible(true);
    Object alertController=mAlert.get(dialog);
    Field mTitleView=alertController.getClass().getDeclaredField("mTitleView");
    mTitleView.setAccessible(true);
    TextView title=(TextView) mTitleView.get(alertController);
    title.setTextColor(getResources().getColor(R.color.colorAccent));
}catch (Exception e){
    e.printStackTrace();
}
2.改变内容(Message)的字体颜色和大小
  从对话框中获取id为message的TextView即可
eg:
TextView mtv=dialog.findViewById(android.R.id.message);
mtv.setTextColor(getResources().getColor(R.color.colorAccent));
mtv.setTextSize(16);
3.改变按钮(Button)的字体颜色和大小
AlertDialg中定义了一系列常量就是方便我们获取这些按钮,并且可以进行自定义。
 eg:
dialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent));
dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent));
dialog.getButton(dialog.BUTTON_NEGATIVE).setTextSize(12);
dialog.getButton(dialog.BUTTON_POSITIVE).setTextSize(12);
4.自定义对话框的主题
这个很简单直接在Builder中使用多参的构造方法即可,样式可自定义
eg:
   AlertDialog dialog=new AlertDialog.Builder(this,R.style.dialogStyle)
        .setTitle("设置小车动作")//设置标题与View
        .setNegativeButton("取消",null)
        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
            }
        }).setNegativeButton("取消",null).create();
dialog.show();

你可能感兴趣的:(Android项目开发问题集锦)