2017-06-25 45 views
0

我希望偏好標題的文本在其他偏好(SwitchPreference)更改時將其顏色更改爲白色。當其他偏好改變我從onPreferenceChange監聽器調用此方法:更改偏好標題文本顏色的方法正確

private void enableSettingsGui(boolean enable) 
{ 
    View preferenceView = getListView().getChildAt(myPref.getOrder()); 
    TextView title = (TextView)preferenceView.findViewById(android.R.id.title); 
    title.setTextColor(getResources().getColor(R.color.white)); 
} 

現在有2種情況:

1)如果我在onPreferenceChange方法返回true,的開關SwitchPreference已正確更改(意思是向左或向右滑動以啓用或禁用其新狀態),但受影響的首選項的標題顏色不會更改。

2)如果我從onPreferenceChange返回false,開關不會改變,但標題文本顏色突然改變。

我該如何正確地做到這一點?

回答

1

使用這種定製PreferenceCategory類:

public class MyPreferenceCategory extends PreferenceCategory { 
    public MyPreferenceCategory(Context context) { 
     super(context); 
    } 

    public MyPreferenceCategory(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyPreferenceCategory(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     TextView titleView = (TextView) view.findViewById(android.R.id.title); 
     titleView.setTextColor(Color.RED); 
    } 
} 

,並在您的Pref.xml文件補充一點:

<ali.UI.Customize.MyPreferenceCategory android:title="@string/pref_server" /> 
+0

但我嘗試色彩單一的偏好,而不是一個類別的標題 –

+0

另外我想根據設定在另偏好值,顏色的文本,不色就不斷 –

+0

如果你喜歡這個給予好評它 – Dhiyaneshwaran

0

我想通了這個問題。

根據有關onPreferenceChange的文檔,則返回值是

「真正的更新與新價值偏好的狀態。」

這意味着開關改變,因爲回報價值告訴他更新狀態。顏色看起來好像沒有設置,但實際上是這樣的,只是爲了改變狀態,偏好的onCreate方法再次被調用,因此覆蓋了顏色的變化。

我所做的是爲了覆蓋setEnabled方法是這樣的:

@Override 
public void setEnabled(boolean enabled) 
{ 
    super.setEnabled(enabled); 
    shouldEnable = enabled; 
} 

然後在onCreate添加一行:setTitleTextColor(shouldEnable);的顏色根據啓用狀態的文本。這樣,更改是在重新創建視圖之後進行的,並且顏色保持不變。