如何创建xamarin表单按钮左角半径

Posted

技术标签:

【中文标题】如何创建xamarin表单按钮左角半径【英文标题】:How to create xamarin forms button left corner radius 【发布时间】:2018-06-08 06:14:44 【问题描述】:

我正在寻找一种方法来为 xamarin 表单中的按钮创建自定义渲染器,以便我可以在按钮的左侧获得圆角。我已经尝试寻找解决方案,但没有任何运气。

【问题讨论】:

在否决票上放轻松,没有教程或关于这个主题的任何东西,只有一侧圆形的按钮。 【参考方案1】:

android 上,您可以在 drawable 文件夹中使用 shape,命名为 layout_bg

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android: android:color="#B1BCBE" />
    <corners
        android:topLeftRadius="10dp"
        android:bottomLeftRadius="10dp"/>
</shape>

在您的自定义渲染中:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)

    base.OnElementChanged(e);
    if (Control != null) 
        Control.SetBackgroundResource(Resource.Drawable.layout_bg);
    

结果:

【讨论】:

【参考方案2】:

有一个非常受欢迎的开源项目FlexButton 可以帮助解决您面临的挑战。如果出于某种原因您仍想自己解决它,而不引入外部依赖项,那么您可以查看该项目的源代码以更好地了解如何实现。

另一种选择是更精确地搜索网络并检查诸如this之类的线程。

祝你好运。

【讨论】:

【参考方案3】:

用于为按钮或任何控件制作不同的圆角半径。您需要在float []数组变量中声明左上角、右上角、左下角右下角半径并在GradientDrawable的SetCornerRadii()方法中传递float变量。

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)


  base.OnElementChanged(e);

        if (Control != null)
        
            Control.SetAllCaps(false);
            GradientDrawable gradientDrawable = new GradientDrawable();                
            float[] radius= new float[8];
            radius[0] = 46f;   //Top Left corner
            radius[1] = 46f;   //Top Left corner
            radius[2] = 0;     //Top Right corner
            radius[3] = 0;     //Top Right corner
            radius[4] = 0;     //Bottom Right corner
            radius[5] = 0;     //Bottom Right corner
            radius[6] = 46f;   //Bottom Left corner
            radius[7] = 46f;   //Bottom Left corner
            gradientDrawable.SetCornerRadii(radius);
            Control.SetBackground(gradientDrawable);
        
    

enter image description here

【讨论】:

【参考方案4】:
Color background = Color.ParseColor("#ff3c4550");
GradientDrawable shape = new GradientDrawable();
shape.SetCornerRadius(10);
shape.SetColor(background.ToArgb());
Background = shape;

【讨论】:

这如何回答这个问题? SetCornerRadius 是否只影响请求的特定角? 您好!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。 抱歉,我的时间太短了,但我在假期前没时间了;)无论如何,我希望它对一个或其他开发人员有所帮助。 (SetCornerRadius) 应用于所有角落。在 OnElementChanged 方法中的 XF android 自定义渲染器代码中使用此代码,它应该是单词。我在自己创建的从 Android.Widget.Button 派生的按钮中自己使用它。

以上是关于如何创建xamarin表单按钮左角半径的主要内容,如果未能解决你的问题,请参考以下文章

如何更改菜单栏中的 Xamarin 后退按钮?

Xamarin挖墙脚系列:开始使用Xamari4.0系列产品开发IOS

如何在 iOS 的 xamarin 表单中创建渐变按钮背景

创建自定义导航栏渲染器以在 xamarin 表单 IOS 项目中添加自定义后退按钮图标

如何在 Xamarin 表单中制作浮动操作按钮

如何在 xamarin 表单中更改搜索栏取消按钮图像