我有使用Stepper
的Xamarin PCL应用。我想更改Stepper
按钮的颜色,现在使用以下渲染器。
在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();
}
}
在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);
}
}
在XAML中:
<local:MyStepper MyColor="Red" Maximum="10" Minimum="0" ....... />
正如所料,它会像所附的图像一样工作。但是有可能让Android颜色只改变&#34;大纲&#34;的按钮就像iOS中的样子一样?
答案 0 :(得分:1)
如何将 - 和+的颜色更改为红色。还有办法吗?
基于@ Sven-MichaelStübe的回答,我添加了一些代码来改变“ - ”和“+”颜色:
protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
{
base.OnElementChanged(e);
MyStepper s = Element as MyStepper;
if (Control != null)
{
var button = Control.GetChildAt(0) as Android.Widget.Button;
button.SetTextColor(s.MyColor.ToAndroid());
button.SetBackground(ResourcesCompat.GetDrawable(Resources, Resource.Drawable.button_selector, null));
button.Background.SetColorFilter(s.MyColor.ToAndroid(), PorterDuff.Mode.Multiply);
var button2 = Control.GetChildAt(1) as Android.Widget.Button;
button2.SetTextColor(s.MyColor.ToAndroid());
button2.SetBackground(ResourcesCompat.GetDrawable(Resources, Resource.Drawable.button_selector, null));
button2.Background.SetColorFilter(s.MyColor.ToAndroid(), PorterDuff.Mode.Multiply);
}
}
去创建一个带状态的drawable,并在Renderer中设置它们,而不是设置一种颜色。
Sven-MichaelStübe想说如果你将一种颜色设置为背景,那么你的Button
将没有点击效果。您可以参考:Material effect on button with background color
了解更多详细信息。
例如:
button_selector.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>
button_border.xml
:
<?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>
答案 1 :(得分:0)
如果您创建自定义矢量绘图
,则可以执行此操作<强> button_border.xml 强>
将此文件放在Android x = (LinkedHashMap<String, String>) xmlRegestryFile.getMap("my/path", String.class)
文件夹中,并确保构建操作设置为Resources\drawable
AndroidResource
<强> MyStepperRenderer.cs 强>
然后你只需要将它设置为两个按钮的背景。
<?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>
<强>讨论强>
如果您没有多种颜色,请使用状态创建一个drawable并在渲染器中设置它们,而不是设置单一颜色。因此,您的用户将获得更好的反馈。