最小值/最大值更新时重绘 Xamarin (Android) 滑块



我有一个 Xamarin 滑块,其Maximum值正在动态更改,我希望它在更新后在屏幕上重新绘制。

在iOS上一切都按预期工作,但Android直到用户下次与之交互时才重新绘制滑块。

我预计这种依赖于平台的行为是调用自定义渲染器的。我可以捕获要触发重绘的 PropertyChangedEvent,但实际上无法重绘滑块。

这是我到目前为止在渲染器上的内容。我已经尝试了注释掉的代码的不同组合,但我未能实际触发重绘。(调试显示代码正在访问,只是没有重绘屏幕。

[assembly: ExportRenderer(typeof(Slider), typeof(MySliderRenderer))]
namespace MyProject.Droid.Renderers
{
public class MySliderRenderer : SliderRenderer
{
public MySliderRenderer(Context context) : base(context)
{
// this.SetWillNotDraw(false);
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == nameof(Slider.Maximum) || e.PropertyName == nameof(Slider.Minimum))
{
// Control.PostInvalidate();
// Control.Invalidate();
// Control.ForceLayout();
// Control.PerformClick();
// Control.RefreshDrawableState();
// PostInvalidate();
// Invalidate();
// ForceLayout();
// PerformClick();
// RefreshDrawableState();
}
}
}
}

当内置数据绑定无法按预期方式触发更新时,如何强制View按需(或此后不久(重绘?

这是安卓开发人员不时遇到的一个常见问题(我猜不是问题,更多的是 Android 基于事件的系统的挂断(。我在开发Xamarin.Android本机解决方案时亲眼见过它。这里有一篇有趣的文章,详细讨论了潜在的问题。诚然,它谈论的是文本框和按钮等其他控件,但原理基本相同。

安卓不会重绘 滑块,直到用户下次与其交互。

这篇文章很好地解释了这一点。查看UISlider的本机Java建议您可以尝试设置最大值,然后直接将现有的UISlider值设置为已经存在的任何值,这应该强制重绘。这并不理想,但目前应该是一个快速的解决方法。

触发的值更改事件应强制 android 处理挂起的应用 UI 事件。

最新更新