gpt4 book ai didi

android - 使用 mvvmcross 的 LinearLayout 背景颜色

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:51 25 4
gpt4 key购买 nike

我有一个圆形的线性布局,想使用值转换器更改它的颜色。

下面是我的线性布局的样子

<LinearLayout
android:orientation="vertical"
android:id="@+id/linearLayoutDaysLeft"
android:background="@drawable/RedBackground"
local:MvxBind="BackgroundColor DateColor(EndDate)"/>

注意我已经将背景设置为@drawable/RedBackground

下面是我的@drawable/RedBackground.xml 文件的样子

<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="10dip"/>
<solid android:color="#D00E0D"/>
</shape>

下面是我的 DateColorValueConverter 代码

protected override Cirrious.CrossCore.UI.MvxColor Convert(object value, object parameter, System.Globalization.CultureInfo culture)
{
var date = (DateTime)value;
int dayLeft;
TimeSpan difference = date - DateTime.Today;
dayLeft = (int)Math.Ceiling(difference.TotalDays);


if (dayLeft < 0)
return (new Cirrious.CrossCore.UI.MvxColor(208, 14, 13, 150));
if (dayLeft >= 0 && dayLeft <= 1)
return (new Cirrious.CrossCore.UI.MvxColor(255, 210, 0, 150));
if (dayLeft > 1)
return (new Cirrious.CrossCore.UI.MvxColor(93, 210, 85, 150));

return (new Cirrious.CrossCore.UI.MvxColor(93, 210, 85, 150));
}

请注意,我的 DateColor 按要求工作,但当它返回颜色时,它会移除圆形

请帮帮我

谢谢

阿曼

最佳答案

首先感谢Stuart指引了正确的方向

我已成功实现所需的可绘制背景更改

如果有人需要,我也想与其他人分享

下面是我自定义的 LinearLayout 绑定(bind)

public class ShapeBackgroundBinding : MvxAndroidTargetBinding
{
private readonly LinearLayout _linearLayout;
public ShapeBackgroundBinding(LinearLayout view) : base(view)
{
this._linearLayout = view;
}
protected override void SetValueImpl(object target, object value)
{
// to do logic
}

public override void SetValue(object value)
{
var date = (DateTime)value;
int dayLeft;
TimeSpan difference = date - DateTime.Today;
dayLeft = (int)Math.Ceiling(difference.TotalDays);


if (dayLeft < 0)
_linearLayout.SetBackgroundResource(Resource.Drawable.RedBackground);
else if (dayLeft >= 0 && dayLeft <= 1)
_linearLayout.SetBackgroundResource(Resource.Drawable.YellowBackground);
else if (dayLeft > 1)
_linearLayout.SetBackgroundResource(Resource.Drawable.GreenBackground);
else
_linearLayout.SetBackgroundResource(Resource.Drawable.GreenBackground);
}
public override Type TargetType
{
get { return typeof(DateTime); }
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.OneTime; }
}
}

下面是我如何在设置文件中注册自定义绑定(bind)

 protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterFactory(new MvxCustomBindingFactory<LinearLayout>("ShapeBackground", (view) => new ShapeBackgroundBinding(view)));
}

完成上述步骤后,简单的我们只需要像下面的代码 fragment 一样绑定(bind)线性布局控件

<LinearLayout
android:orientation="vertical"
android:id="@+id/linearLayoutTest"
local:MvxBind="ShapeBackground EndDate">

就是这样......

关于android - 使用 mvvmcross 的 LinearLayout 背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24528138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com