package com.wangdaye.mysplash.common.ui.widget.preference; import android.content.Context; import android.graphics.Typeface; import android.os.Build; import android.preference.SwitchPreference; import android.support.annotation.RequiresApi; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.Switch; import android.widget.TextView; import com.wangdaye.mysplash.R; import com.wangdaye.mysplash.common.utils.DisplayUtils; import com.wangdaye.mysplash.common.utils.manager.ThemeManager; /** * Mysplash switch preference. * * A Preference that can set style of the texts. * * */ public class MysplashSwitchPreference extends SwitchPreference { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public MysplashSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public MysplashSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MysplashSwitchPreference(Context context, AttributeSet attrs) { super(context, attrs); } public MysplashSwitchPreference(Context context) { super(context); } @Override protected void onBindView(View view) { clearListenerInViewGroup((ViewGroup) view); super.onBindView(view); TextView title = (TextView) view.findViewById(android.R.id.title); title.setTextSize( TypedValue.COMPLEX_UNIT_PX, getContext().getResources().getDimension(R.dimen.title_text_size)); title.setTypeface(Typeface.DEFAULT_BOLD); title.setTextColor(ThemeManager.getTitleColor(getContext())); TextView summary = (TextView) view.findViewById(android.R.id.summary); summary.setTextSize( TypedValue.COMPLEX_UNIT_PX, getContext().getResources().getDimension(R.dimen.subtitle_text_size)); DisplayUtils.setTypeface(getContext(), summary); summary.setTextColor(ThemeManager.getSubtitleColor(getContext())); } private void clearListenerInViewGroup(ViewGroup viewGroup) { if (viewGroup == null) { return; } for(int i = 0; i < viewGroup.getChildCount(); i ++) { View v = viewGroup.getChildAt(i); if(v instanceof Switch) { ((Switch) v).setOnCheckedChangeListener(null); return; } else if (v instanceof ViewGroup){ clearListenerInViewGroup((ViewGroup) v); } } } }