天天看點

如何通過反射來解決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的對象。好了,到這裡分析完畢。現在就剩下取出該對象,對該對象進行反射了。

好了,到了這裡就解決完畢了。

如有問題請留言。

繼續閱讀