我正在尝试通过使用新的AppThemeBinding为Android实现Darkmode。它适用于Android和iOS,但我对如何针对自定义渲染器或自定义样式实现它一无所知。
例如,我有一个自定义的Stepper渲染器,看起来像这样:
protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Android.Widget.Button buttonDown = (Android.Widget.Button)Control.GetChildAt(0);
Android.Widget.Button buttonUp = (Android.Widget.Button)Control.GetChildAt(1);
if(e.NewElement != null)
{
//Button Down
buttonDown.SetBackgroundResource(Resource.Drawable.button_bg_left);
buttonDown.LayoutParameters = new LinearLayout.LayoutParams(DpToPixel(50), DpToPixel(33));
buttonDown.SetPadding(0,0,0,0);
buttonDown.SetTextColor(Android.Graphics.Color.ParseColor("#007bff"));
//Button Up
buttonUp.SetBackgroundResource(Resource.Drawable.button_bg_right);
buttonUp.LayoutParameters = new LinearLayout.LayoutParams(DpToPixel(50), DpToPixel(33));
buttonUp.SetPadding(0, 0, 0, 0);
buttonUp.SetTextColor(Android.Graphics.Color.ParseColor("#007bff"));
}
}
}
我正在设置一个背景资源,它是一个.xml
文件,看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke android:width="1dp" android:color="#007bff" />
<corners
android:topLeftRadius="5dp"
android:bottomLeftRadius="5dp"/>
</shape>
由于AppThemeBinding是标记扩展,并且可以在.xaml
文件内部工作,所以我不知道如何为Android特定渲染器实现颜色更改?
我该如何更改明/暗模式的自定义形状的颜色?
您可以在渲染器中检测当前系统主题,然后设置相应的颜色:
class MyStepperRenderer : StepperRenderer
{
public MyStepperRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
{
base.OnElementChanged(e);
OSAppTheme currentTheme = Xamarin.Forms.Application.Current.RequestedTheme;
if (currentTheme == OSAppTheme.Light)
{
//
}
else
{
//
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句