安卓封裝的AlertDialog是非常好用的一個dialog,滿足平時開發中的大部分工作。
但是畢竟開發中,dialog的樣式必須要和app主題相符合,這就需要修改dialog的樣式。
但是dialog並沒有提供改變樣式的方法,這就要我們自己去弄了。
網上提供了很多,有用style 有用java 反射去獲取控件的。
但是研究源碼可以看到,其實可以用代碼去設置。
先看看不作任何修改的時候,alterdialog的顯示。
ps:(Button可以在style中修改可以通過查看源碼的方法找到,他的style裡面button顏色對應的字段就是colorAccent)





當我們要修改title 或者message 或者button的顏色的時候,alterdialog並沒有提供方法。
但是研究源碼可以看到alterDialog提供了getButton();

源碼在AlterDialog.class裡面

源碼位置在AlertController.class裡面
原來這樣就可以獲取Button了,那麼Button的字體和顏色就不成什麼問題了。
注意必須dialog.show()之後才可以獲取到Button不然獲取到的Button為空的。
因為返回的參賽如mButtonPositive實例化是在setupButtons這個方法裡面,而這個方法只有alterDialog在show的時候才會調用

源碼位置在AlertController.class裡面
那麼問題來了message和title呢,alterDialog並沒有提供這個方法,這個怎麼獲取,
其他上面Button的實例化已經提供了一個方法,看圖

他的Button是通過findById去獲取的,那麼我們title和message不一樣可以用findById么。
ctrl+鼠標左鍵,查看布局源碼,找到title和message的id。如圖

源碼位置在alter_dialog.xml裡面

源碼位置在alter_dialog.xml裡面
那麼我們就可以通過Id去獲取了

至於為什麼我上面用android.R.id.message去獲取id是因為項目中的ids.xml中已經有了message這個id了
控件獲取到了修改字體和顏色 不就是小case了。

效果圖

DialogTitle是繼承TextView的所有上面的查找Title的控件 我直接轉化成TextView

多研究源碼收穫還是很多的。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/222596.html
微信掃一掃
支付寶掃一掃