轉載前請标明出處:http://blog.csdn.net/sahadev_
先上一下示例圖:
這是預設狀态下:

這是通過反射後修改的結果:
在解決這個問題之前首先需要了解一下AlertDialog的基本構造,是以先從源碼看起:
想要知道為什麼顯示不全,首先入口處應該是這裡:
然後進入setTitle的方法:
好了,它把字元串賦給了對象P,然後再來看看P的類型:
好了,進入AlertController.AlertParams類内可以看到該類是屬于AlertController的内部類,以下為該類的部分屬性:
好了,是以那個字元串設定時最終會設定到這個類對象的mTitle處,然後接下來就是要檢視這個屬性什麼時候被使用了呢:
在内類可以看到該方法使用了該屬性:
這裡說明mTitle被設定給了AlertController的對象dialog,然後接下來就是尋找這個dialog對象是怎麼被傳入進來的:
通過尋找找到apply該方法的被調用處是:
該方法位于AlertDialog.Builder的内部,也就是當Builder對象調用create方法時會将AlertController的對象dialog傳入,這裡可以看到是dialog的mAlert屬性,也就是說dialog的mAlert屬性是AlertController的對象。好了,到這裡分析完畢。現在就剩下取出該對象,對該對象進行反射了。
好了,到了這裡就解決完畢了。
如有問題請留言。