这是我的解决方案,它创建了一个自定义小部件来模仿 Switch 控件。我正在使用 Xamarin,但此代码可以轻松转换为 Java。
SwitchImageView.cs:
public class SwitchImageView : RelativeLayout {
private View view;
private bool isChecked;
private int imageResourceIdOn = Resource.Drawable.switch_on;
private int imageResourceIdOff = Resource.Drawable.switch_off;
public SwitchImageView(Context context): base(context) {
Init ();
}
public SwitchImageView(Context context, IAttributeSet attrs) : base(context, attrs) {
Init ();
}
public SwitchImageView(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle) {
Init ();
}
private void Init () {
var layoutInflater = (LayoutInflater)ApplicationContext.Activity.GetSystemService (Context.LayoutInflaterService);
layoutInflater.Inflate (RPR.Mobile.Resource.Layout.SwitchImageView, this, true);
this.Click += (object sender, EventArgs e) => {
Checked = !Checked;
};
}
public int ImageResourceIdOn {
get {
return imageResourceIdOn;
}
set {
imageResourceIdOn = value;
if (isChecked) {
this.SetBackgroundResource (value);
}
}
}
public int ImageResourceIdOff {
get {
return imageResourceIdOff;
}
set {
imageResourceIdOff = value;
if (!isChecked) {
this.SetBackgroundResource (value);
}
}
}
public string TextOn {
get {
return this.FindViewById <TextView> (Resource.Id.switch_on_text).Text;
}
set {
this.FindViewById <TextView> (Resource.Id.switch_on_text).Text = value;
}
}
public string TextOff {
get {
return this.FindViewById <TextView> (Resource.Id.switch_off_text).Text;
}
set {
this.FindViewById <TextView> (Resource.Id.switch_off_text).Text = value;
}
}
public bool Checked {
get {
return isChecked;
}
set {
isChecked = value;
this.SetBackgroundResource (value ? ImageResourceIdOn : ImageResourceIdOff);
this.FindViewById <TextView> (Resource.Id.switch_on_text).SetTextColor (value ? Color.White : Color.Black);
this.FindViewById <TextView> (Resource.Id.switch_off_text).SetTextColor (value ? Color.Black : Color.White);
if (CheckedChange != null) {
CheckedChange (this, value);
}
}
}
public event EventHandler<bool> CheckedChange;
}
SwitchImageView.axml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/switch_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/strut"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="invisible"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/switch_off_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textColor="@color/black"
android:text="On"
android:textAppearance="?android:attr/textAppearanceSmall"
android:paddingLeft="10dp"
android:paddingTop="3dp" />
<TextView
android:id="@+id/switch_on_text"
android:layout_toRightOf="@+id/strut"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textColor="@color/white"
android:text="Off"
android:textAppearance="?android:attr/textAppearanceSmall"
android:paddingRight="5dp"
android:paddingLeft="10dp"
android:paddingTop="3dp" />
</RelativeLayout>