2013-06-18 29 views
4
Preference myPreference; 
... 
Drawable originalIcon = myPreference.getIcon(); 
myPreference.setIcon(android.R.drawable.btn_star); 
... 
myPreference.setIcon(originalIcon); 

上面的代碼會將圖標更改爲首選項,然後再恢復它。從首選項中刪除圖標

如果首選項沒有圖標,首選項的文本會右移並添加圖標(getIcon返回null)。爲Drawable調用setIcon爲null不會刪除圖標。如何刪除圖標並將偏好文本左移到其原始位置。

回答

2

OK,這樣做是爲了定義一個空圖標繪製這樣一個辦法:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list /> 

,然後使用:

if (originalIcon == null) { 
    myPreference.setIcon(R.drawable.my_null_icon); 
} 
else { 
    myPreference.setIcon(originalIcon); 
} 
2

與接受的解決方案的問題是,它仍然葉空圖標和其他偏好之間的間距。

正確的解決方案是永遠不要調用setIcon(int);只調用setIcon(Drawable)。

因此你的代碼的微小變化會工作:

Preference myPreference; 
... 
Drawable originalIcon = myPreference.getIcon(); 
myPreference.setIcon(mPreference.getContext().getResources().getDrawable(
    android.R.drawable.btn_star)); 
... 
myPreference.setIcon(originalIcon); 

這是由於一些不幸的代碼Preference.onBindView(),它回落到之前設定的資源ID,如果空繪製的是通過英寸

+0

這解決了我的問題!感謝提示這種奇怪的行爲。 –

0

斯蒂芬的答案完美的作品。我只是想建議代碼可能會更短一些。取而代之的

myPreference.setIcon(mPreference.getContext().getResources().getDrawable(
android.R.drawable.btn_star)); 

我下面的作品

myPreference.setIcon(getActivity().getDrawable(android.R.drawable.btn.star)); 
0

這應該做的伎倆。

myPreference.setIcon(android.R.color.transparent);