自定义布局中开关首选项中开/关切换的颜色变化

Posted

技术标签:

【中文标题】自定义布局中开关首选项中开/关切换的颜色变化【英文标题】:Color change of on/off toggle in switchpreference in customlayout 【发布时间】:2015-02-26 12:49:11 【问题描述】:

我在 customlayout 中使用 PreferenceScreen 开发了一个设置页面。有一个我想改变颜色的开关偏好。目前它采用默认颜色。但是我想在用户打开和关闭它时更改它的颜色。当用户打开时,打开侧应该是红色,当用户切换到关闭侧时,“关闭”侧应该是浅灰色。我的 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编程的新手,所以请合作。如果有人帮助我,我会很高兴。在此先感谢!

【问题讨论】:

【参考方案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;
    

【讨论】:

【参考方案2】:

试试这个:

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

);

【讨论】:

它给出了一个错误,称为 - 对于 SwitchPreference 类型的方法 setOnDragListener(new View.OnDragListener()) 是未定义的 @android_newcomer 你也可以试试这个解决方案***.com/a/21854548

以上是关于自定义布局中开关首选项中开/关切换的颜色变化的主要内容,如果未能解决你的问题,请参考以下文章

自定义控件基础01_菜单轮__viewPager_下拉框_自定义开关

自定义列表视图中的切换开关使列表视图无法点击

android开发笔记之自定义开关按钮

使用 CoreGraphics 绘制自定义 UIView

自定义控件-点击实现开关按钮切换

Ubuntu中怎样修改命令终端Terminal的配色方案