customlayout中开关首选项中开/关切换的颜色变化

时间:2014-12-30 10:47:00

标签: java android eclipse android-layout android-activity

我在customlayout中使用PreferenceScreen开发了一个设置页面。有一个switchpreference我想改变颜色。目前它采用默认颜色。但我想在用户打开和关闭时更改其颜色。当用户打开时,打开时应为红色,当用户切换到关闭时,“关闭”侧应为浅灰色。我的Switchpreference代码如下:

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

<PreferenceCategory android:key="pref" >

    <SwitchPreference
        android:key="switchbutton"
        android:summaryOff="OFF"
        android:summaryOn="ON"
        android:title="start" />
</PreferenceCategory>

我是Android编程的新手,所以请合作。如果有人帮助我,我会很高兴。谢谢你提前!!

2 个答案:

答案 0 :(得分:1)

我在Custom SwitchPreference in Android

的类似问题中发布了这个答案

这样做的一种方法是对SwitchPreference进行子类化并覆盖onBindView方法。在这样做时,您仍然希望在该方法中调用super.onBindView(view),但随后在子视图中找到Switch并根据需要设置样式:

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<view.getChildCount();i++) {
            View thisChildview = view.getChildAt(i);
            if (thisChildview instanceof Switch) {
                return (Switch)thisChildview;
            }
            else if (thisChildview instanceof  ViewGroup) {
                Switch theSwitch = findSwitchInChildviews((ViewGroup) thisChildview);
                if (theSwitch!=null) return theSwitch;
            }
        }
        return null;
    }
}

答案 1 :(得分:0)

试试这个:

mViewSwitcher.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
// set color here
return false;
}
});