安卓背景透明代碼 android自定義dialog樣式



文章插圖
安卓背景透明代碼 android自定義dialog樣式

文章插圖
安卓封裝的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
【安卓背景透明代碼 android自定義dialog樣式】多研究源碼收獲還是很多的 。