Custom SwitchPreference in Android

前端 未结 3 405
粉色の甜心
粉色の甜心 2020-12-03 11:49

How to set a custom style or other background selector drawable for the SwitchPreference widget in Android?

(Note: not the regular Switch

3条回答
  •  萌比男神i
    2020-12-03 12:19

    One way of doing this is to subclass the SwitchPreference and override the onBindView method. In doing so, you'll want to still call super.onBindView(view) in that method, but then find the Switch in the child views and style it as appropriate:

    package com.example;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.preference.SwitchPreference;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Switch;
    
    import com.example.R;
    
    
    public class CustomSwitchPreference extends SwitchPreference {
    
        @SuppressLint("NewApi")
        public CustomSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        public CustomSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        public CustomSwitchPreference(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CustomSwitchPreference(Context context) {
            super(context);
        }
    
        @Override
        protected void onBindView(View view) {
    
            super.onBindView(view);
            Switch theSwitch = findSwitchInChildviews((ViewGroup) view);
            if (theSwitch!=null) {
                //do styling here
                theSwitch.setThumbResource(R.drawable.new_thumb_resource);
            }
    
        }
    
        private Switch findSwitchInChildviews(ViewGroup view) {
            for (int i=0;i

提交回复
热议问题