要更改对话框中的标题颜色,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 extends Object>)
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();