Xamarin:如何将Android中的步进器颜色更改为iOS中的颜色?
我有Xamarin PCL应用程序,它使用Xamarin:如何将Android中的步进器颜色更改为iOS中的颜色?,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我有Xamarin PCL应用程序,它使用步进器。我想更改步进器按钮的颜色,现在使用以下渲染器 在PCL中: public class MyStepper : Stepper { public static readonly BindableProperty ColorProperty = BindableProperty.Create(nameof(Color), typeof(Color), typeof(MyStepper), Color.Default);
步进器
。我想更改步进器按钮的颜色,现在使用以下渲染器
在PCL中:
public class MyStepper : Stepper
{
public static readonly BindableProperty ColorProperty =
BindableProperty.Create(nameof(Color), typeof(Color), typeof(MyStepper), Color.Default);
public Color MyColor
{
get { return (Color)GetValue(ColorProperty); }
set { SetValue(ColorProperty, value); }
}
}
在iOS中:
public class MyStepperRenderer : StepperRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
{
base.OnElementChanged(e);
MyStepper s = Element as MyStepper;
if (Control != null)
Control.TintColor = s.MyColor.ToUIColor();
}
}
公共类mystepperrender:stepperrender
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
MyStepper s=作为MyStepper的元素;
if(控件!=null)
Control.TintColor=s.MyColor.ToUIColor();
}
}
在Android中:
protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
{
base.OnElementChanged(e);
MyStepper s = Element as MyStepper;
if (Control != null)
{
Control.GetChildAt(0).Background.SetColorFilter(s.MyColor.ToAndroid(), PorterDuff.Mode.Multiply);
Control.GetChildAt(1).Background.SetColorFilter(s.MyColor.ToAndroid(), PorterDuff.Mode.Multiply);
}
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
MyStepper s=作为MyStepper的元素;
if(控件!=null)
{
Control.GetChildAt(0.Background.SetColorFilter(s.MyColor.ToAndroid(),PorterDuff.Mode.Multiply);
Control.GetChildAt(1.Background.SetColorFilter(s.MyColor.ToAndroid(),PorterDuff.Mode.Multiply);
}
}
在XAML中:
<local:MyStepper MyColor="Red" Maximum="10" Minimum="0" ....... />
正如预期的那样,它将像附加的图像一样工作。但是,是否有可能让Android颜色只改变按钮的“轮廓”,就像它在iOS中的外观一样?如果您创建了一个自定义的可绘制向量,您就可以这样做 按钮\u border.xml 将此文件放在Android
Resources\drawable
文件夹中,并确保构建操作设置为AndroidResource
mystepperrender.cs
然后您只需要将其设置为两个按钮的背景
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
var s=作为MyStepper的元素;
if(控件!=null)
{
GetChildAt(0).SetBackground(Resources.GetDrawable(Resource.Drawable.button_border));
GetChildAt(1).SetBackground(Resources.GetDrawable(Resource.Drawable.button_border));
Control.GetChildAt(0.Background.SetColorFilter(s.MyColor.ToAndroid(),PorterDuff.Mode.Multiply);
Control.GetChildAt(1.Background.SetColorFilter(s.MyColor.ToAndroid(),PorterDuff.Mode.Multiply);
}
}
这将看起来像:
讨论
- 您可以释放状态,如按下、禁用。。。(见附件)
按钮\u border.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorAccent" android:state_pressed="true"/>
<item android:drawable="@color/colorPrimaryDark" android:state_focused="true"/>
<item android:drawable="@drawable/button_border"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#00FFFFFF" />
<corners android:radius="5dp" />
<stroke
android:width="2dp"
android:color="#FFFFFF" />
</shape>
谢谢,把-和+的颜色也改成红色怎么样。有没有办法做到这一点?我只有红色,所以您可以解释一下“在渲染器中设置它们,以便用户获得更好的反馈”是什么意思。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#00FFFFFF" />
<corners android:radius="5dp" />
<stroke
android:width="2dp"
android:color="#FFFFFF" />
</shape>