Checkbox 复选框大小Xamarin Android

Checkbox 复选框大小Xamarin Android,checkbox,xamarin.forms,Checkbox,Xamarin.forms,我使用以下文章在我的Xamarin表单应用程序中实现了复选框: 我唯一的问题是,我无法设置Android的大小,在评论部分有一个问题,但是没有解决方案。无论我做什么,SizeRequest始终是64x64-有人能提供我无法调整大小的任何建议或原因吗?您是否尝试在第91行之前使用下面的代码来缩放控件: Control.ScaleX = 0.70; Control.ScaleY = 0.70; 也许我找到了一个,请检查以下步骤: 在自定义复选框控件中添加名为SizeRequest的Bindab

我使用以下文章在我的Xamarin表单应用程序中实现了复选框:


我唯一的问题是,我无法设置Android的大小,在评论部分有一个问题,但是没有解决方案。无论我做什么,SizeRequest始终是64x64-有人能提供我无法调整大小的任何建议或原因吗?

您是否尝试在第91行之前使用下面的代码来缩放控件:

Control.ScaleX = 0.70;
Control.ScaleY = 0.70;
也许我找到了一个,请检查以下步骤:

  • 在自定义复选框控件中添加名为
    SizeRequest
    BindableProperty
  • 创建一个方法
    GetDefaultCheckBoxDrawable
    以获取默认复选框drawable
  • 更改
    OnElementChanged
    方法以清除和调整文本大小,根据
    SizeRequest
    设置宽度/高度,重置按钮可绘制,并使用默认复选框可绘制设置新的背景可绘制
AndroidCheckboxRenderer.cs

private Drawable GetDefaultCheckBoxDrawable(Android.Views.View view)
{
    TypedValue value = new TypedValue();
    view.Context.Theme.ResolveAttribute(Android.Resource.Attribute.ListChoiceIndicatorMultiple, value, true);
    var origImg = view.Context.Resources.GetDrawable(value.ResourceId);
    var porterDuffColor = new Android.Graphics.PorterDuffColorFilter(Element.CheckColor.ToAndroid(), Android.Graphics.PorterDuff.Mode.SrcIn);
    origImg.SetColorFilter(porterDuffColor);
    return origImg;
}

protected override void OnElementChanged(ElementChangedEventArgs<CustomCheckbox> e)
{
    ...

    // CheckBox displays its height from the TEXT, as well as images.
    checkBox.Text = "";
    checkBox.SetTextSize(Android.Util.ComplexUnitType.Sp, 0);

    // Set the width and height based on SizeRequest
    if (Element.SizeRequest >= 0)
    {
        checkBox.SetWidth((int)Element.SizeRequest);
        checkBox.SetHeight((int)Element.SizeRequest);
    }

    // Reset the Button Drawable
    checkBox.SetButtonDrawable(null);
    // Set Background Drawable with the default CheckBox
    checkBox.SetBackgroundDrawable(GetDefaultCheckBoxDrawable(this));

    ...
}
private Drawable GetDefaultCheckBoxDrawable(Android.Views.View)
{
TypedValue=新的TypedValue();
view.Context.Theme.ResolveAttribute(Android.Resource.Attribute.ListChoiceIndicatorMultiple,value,true);
var origImg=view.Context.Resources.GetDrawable(value.ResourceId);
var porterDuffColor=newandroid.Graphics.PorterDuffColorFilter(Element.CheckColor.ToAndroid(),Android.Graphics.PorterDuff.Mode.SrcIn);
原始设置颜色过滤器(porterDuffColor);
返回原点;
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
...
//复选框显示其相对于文本的高度以及图像。
复选框。Text=“”;
checkBox.SetTextSize(Android.Util.ComplexUnitType.Sp,0);
//根据SizeRequest设置宽度和高度
如果(Element.SizeRequest>=0)
{
checkBox.SetWidth((int)Element.SizeRequest);
checkBox.SetHeight((int)Element.SizeRequest);
}
//将按钮复位为可拖动
复选框.SetButtonDrawable(空);
//使用默认复选框设置背景可绘制
checkBox.SetBackgroundDrawable(GetDefaultCheckBoxDrawable(this));
...
}
查看完整的解决方案


我希望这能对您有所帮助。

感谢您的及时回复-我将ScaleX和Y设置为1.5f(我想增加复选框的大小),但是这会导致复选框的一半显示-无论对齐方式如何这是一个很好的响应!!我更新了一些显示为不推荐的行,但除此之外,它工作得非常好!非常感谢。是的,如果有几行不推荐使用,我也会修复它们,并使回购协议保持最新。tks