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

Приведенный выше код изменит значок на предпочтение, а затем восстановит его.Удаление значка от предпочтения

Если у предпочтения нет значка, текст для предпочтения смещается вправо и значок добавляется (getIcon возвращает null). Вызов setIcon с нулевым значением для Drawable не удаляет значок. Как удалить значок и переместить текст предпочтения в исходное положение.

ответ

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); только call setIcon (Drawable).

Таким образом, небольшое изменение в код будет работать:

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

Это связанно с некоторым несчастливым кодом в Preference.onBindView(), который возвращается к ранее установленному идентификатору ресурса, если нулевая вытяжка является

+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); 
Смежные вопросы