最近在做一個語音視頻通話模塊,處理UI時,出現一個很奇怪的問題,具體如下:
在語音視頻通話過程中,對方拒絕或者結束通話後,界面上的接聽、掛斷等按鈕背景切換成灰色,導致語音和結束按鈕大小變大(實際上是layout佈局裏面的Padding失效了),原佈局如下(XML,主要紅色的):
掛斷後,變更UI,代碼設置按鈕背景如下:
if (btEnd != null) {
btEnd.setBackgroundResource(R.drawable.end_voip_btn_bg);
btEnd.setEnabled(false);
}
結果出現如下:
掛斷後的UI按鈕明顯變大,圖標被拉伸,仔細觀察可以發現,其實是padding失效了。
解決方法:
代碼裏面設置背景時,Padding也進行設置:
if (btEnd != null) {
btEnd.setBackgroundResource(R.drawable.end_voip_btn_bg);
int bottom = btEnd.getPaddingBottom();
int top = btEnd.getPaddingTop();
int right = btEnd.getPaddingRight();
int left = btEnd.getPaddingLeft();
btEnd.setPadding(left, top, right, bottom);
btEnd.setEnabled(false);
}
類似問題:
http://www.cnblogs.com/over140/archive/2012/07/20/2600525.html
http://blog.csdn.net/houshunwei/article/details/6727433
後續:有些人會發現,代碼獲取的padding值可能和我們設置的不一樣。。。我這種情況就是,所以問題還是沒能解決,最後哥們只能在setEnable做點手腳了,通過在backgroup的selector XML文件中添加一個事件:
然後掛斷的時候,設置控件的setEnable(false),解決!至於爲什麼獲取的padding值可能和我們設置的不一樣,這個後續看下,目前項目太趕了。