Android代碼調用setBackgroundResource引起的Padding問題

最近在做一個語音視頻通話模塊,處理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值可能和我們設置的不一樣,這個後續看下,目前項目太趕了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章