天天看点

如何通过反射来解决AlertDialog标题由于字数过多显示不全的问题

转载前请标明出处:http://blog.csdn.net/sahadev_

先上一下示例图:

这是默认状态下:

如何通过反射来解决AlertDialog标题由于字数过多显示不全的问题

这是通过反射后修改的结果:

如何通过反射来解决AlertDialog标题由于字数过多显示不全的问题

在解决这个问题之前首先需要了解一下AlertDialog的基本构造,所以先从源码看起:

想要知道为什么显示不全,首先入口处应该是这里:

然后进入setTitle的方法:

好了,它把字符串赋给了对象P,然后再来看看P的类型:

好了,进入AlertController.AlertParams类内可以看到该类是属于AlertController的内部类,以下为该类的部分属性:

好了,所以那个字符串设置时最终会设置到这个类对象的mTitle处,然后接下来就是要查看这个属性什么时候被使用了呢:

在内类可以看到该方法使用了该属性:

这里说明mTitle被设置给了AlertController的对象dialog,然后接下来就是寻找这个dialog对象是怎么被传入进来的:

通过寻找找到apply该方法的被调用处是:

该方法位于AlertDialog.Builder的内部,也就是当Builder对象调用create方法时会将AlertController的对象dialog传入,这里可以看到是dialog的mAlert属性,也就是说dialog的mAlert属性是AlertController的对象。好了,到这里分析完毕。现在就剩下取出该对象,对该对象进行反射了。

好了,到了这里就解决完毕了。

如有问题请留言。

继续阅读