我在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编程的新手,所以请合作。如果有人帮助我,我会很高兴。谢谢你提前!!
答案 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;
}
});