【问题标题】:Xamarin.Forms XAML Rounded ButtonXamarin.Forms XAML 圆形按钮
【发布时间】:2016-08-24 00:05:20
【问题描述】:

我试图在我的 Xamarin.Forms 应用程序中放置一个圆形按钮,但我做不到。

我阅读了一些关于按钮的自定义控制器的内容,但我没有在 Xamarin.Forms 中找到任何关于圆形按钮的文档。

有人知道怎么做吗?我只是在构建一个 AndroidiOS 应用程序。

【问题讨论】:

  • 我建议您将我的答案设为接受答案,因为它是最新的,

标签: button xamarin xamarin.forms


【解决方案1】:

您可以使用 BorderRadius 属性在按钮上创建圆角

<Button Text="BlueButton"
        BorderColor="Blue"
        BorderRadius="5"
        BorderWidth="2"/>

【讨论】:

  • 嘿!感谢你的回答。但是当我运行它时,仍然是一个矩形。因为 Xamarin.Forms 覆盖它。我知道怎么做。
  • 如果您在 Android 上遇到问题,请参阅:*.com/questions/37126414/…
  • 更新:BorderRadius 现已过时 - 请改用 CornerRadius。
【解决方案2】:

您需要使用CornerRadius 而不是BorderRadius,因为:

'Button.BorderRadius' 已过时:'BorderRadius 已过时 2.5.0。请改用 CornerRadius。'

例如:XButton.CornerRadius = 5;

【讨论】:

    【解决方案3】:

    如果您尝试使用圆形按钮,请使用以下代码。高度和宽度需要相同,并且与边框半径成比例。

    <Button HorizontalOptions="Fill" VerticalOptions="Fill" Text="+">              
                <Button.WidthRequest>
                  <OnIdiom x:TypeArguments="x:Double" Phone="60" Tablet="80" />
                </Button.WidthRequest>
                <Button.HeightRequest>
                  <OnIdiom x:TypeArguments="x:Double" Phone="60" Tablet="80" />
                </Button.HeightRequest>
                <Button.BorderRadius>
                  <OnIdiom x:TypeArguments="x:Int32" Phone="30" Tablet="40" />
                </Button.BorderRadius>
     </Button>
    

    如果您可以在手机和平​​板电脑上使用相同的尺寸,您可以忽略平板电脑的不同尺寸。

    注意:这不适用于 Windows。你会得到一个方形按钮。

    在 Android 中,如果您的 mainactivity 继承自 AppCompact,您也必须添加 this

    【讨论】:

    • 这行得通,但不是 Horizo​​ntalOptions="Fill",而是使用 Horizo​​ntalOptions="Center"
    【解决方案4】:

    xaml 的一侧属性为 ConerRadius,示例:

    <Button 
        CornerRadius="20"
        Text="{i18n:Translate Cancel}"
        Command="{Binding CancelarCommand}" 
        BackgroundColor="{StaticResource ButtonBackgroundColorbuscar}" 
        TextColor="White" /> 
    

    【讨论】:

      【解决方案5】:

      如果您想要一个图像按钮,您可以将此 ButtonCirclePlugin 用于 Xamarin 表单。

      或者像 ImageCirclePlugin 这样的 ImageCircle 用于 Xamarin 表单并添加 TapGestureRecognizer。

      【讨论】:

        【解决方案6】:

        当前版本的 Xamarin Forms 中没有 BorderRadius 属性。另一种方法是CornerRadius 属性。

        示例:

        <Button Text="Submit"
         FontSize="Large"
         TextColor="White"
         BackgroundColor="Green" 
         CornerRadius="100"
        

        【讨论】:

          【解决方案7】:

          要创建圆形(圆形)按钮,试试这个...

            <Button WidthRequest = 100,
                      HeightRequest = 100,
                      BorderRadius = 50 />
          

          一般来说,WidthRequest=x, HeightRequest=x, BorderRadius=x/2

          【讨论】:

            【解决方案8】:

            如果您不希望使用渲染器,并且不介意在 Windows Phone 上没有圆形按钮,则可以使用以下代码:

            private const int BUTTON_BORDER_WIDTH = 1;
            
            // Normal button height
            //private const int BUTTON_HEIGHT = 44;
            //private const int BUTTON_HEIGHT_WP = 72;
            //private const int BUTTON_HALF_HEIGHT = 22;
            //private const int BUTTON_HALF_HEIGHT_WP = 36;
            //private const int BUTTON_WIDTH = 44;
            //private const int BUTTON_WIDTH_WP = 72;
            
            // Large button Height
            private const int BUTTON_HEIGHT = 88;
            private const int BUTTON_HEIGHT_WP = 144;
            private const int BUTTON_HALF_HEIGHT = 44;
            private const int BUTTON_HALF_HEIGHT_WP = 72;
            private const int BUTTON_WIDTH = 88;
            private const int BUTTON_WIDTH_WP = 144;
            
            public RoundButtonPage()
            {
                var button = new Button
                {
                    HorizontalOptions = LayoutOptions.Center,
                    BackgroundColor = Color.Accent,
                    BorderColor = Color.Black,
                    TextColor = Color.White,
                    BorderWidth = BUTTON_BORDER_WIDTH,
                    BorderRadius = Device.OnPlatform(BUTTON_HALF_HEIGHT, BUTTON_HALF_HEIGHT, BUTTON_HALF_HEIGHT_WP),
                    HeightRequest = Device.OnPlatform(BUTTON_HEIGHT, BUTTON_HEIGHT, BUTTON_HEIGHT_WP),
                    MinimumHeightRequest = Device.OnPlatform(BUTTON_HEIGHT, BUTTON_HEIGHT, BUTTON_HEIGHT_WP),
                    WidthRequest = Device.OnPlatform(BUTTON_WIDTH, BUTTON_WIDTH, BUTTON_WIDTH_WP),
                    MinimumWidthRequest = Device.OnPlatform(BUTTON_WIDTH, BUTTON_WIDTH, BUTTON_WIDTH_WP),
                    Text = "ClickMe"
                };
            
                var stack = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Orientation = StackOrientation.Vertical,
                    Children = { button },
                };
            
                Padding = new Thickness(10, Device.OnPlatform(20, 0, 0), 10, 5);
                Content = stack;
            }
            

            它将制作一个带圆角的按钮。要使按钮完全圆形,您只需将边框半径设置为高度的一半。

            唯一要记住的是,您的按钮必须足够大以包含内容。您可以通过注释/取消注释顶部的两个常量部分来了解我的意思。第一组适用于数字或字母,第二组适用于短语,例如“ClickMe”。

            同样,这使用了平台的原生按钮,由于 WP 不支持边框半径,因此 WP 上的所有按钮都是矩形的,因此您需要使用 James 在 CircularImage 控件中展示的技术。

            【讨论】:

            • xaml 呢?有可能吗?
            【解决方案9】:

            试试这个 C# 代码

            private const int BUTTON_BORDER_WIDTH = 1;
            private const int BUTTON_HEIGHT = 65;
            private const int BUTTON_HEIGHT_WP = 40;
            private const int BUTTON_HALF_HEIGHT = 33;
            private const int BUTTON_HALF_HEIGHT_WP = 20;
            private const int BUTTON_WIDTH = 65;
            private const int BUTTON_WIDTH_WP = 20;
            var chkIm = new Button()
            {
                BackgroundColor = Color.Black,
                HorizontalOptions = LayoutOptions.Center,
                TextColor = Color.White,
                BorderRadius = Device.OnPlatform(BUTTON_HALF_HEIGHT, BUTTON_HALF_HEIGHT, BUTTON_HALF_HEIGHT_WP),
                HeightRequest = Device.OnPlatform(BUTTON_HEIGHT, BUTTON_HEIGHT, BUTTON_HEIGHT_WP),
                MinimumHeightRequest = Device.OnPlatform(BUTTON_HEIGHT, BUTTON_HEIGHT, BUTTON_HEIGHT_WP),
                WidthRequest = Device.OnPlatform(BUTTON_WIDTH, BUTTON_WIDTH, BUTTON_WIDTH_WP),
                MinimumWidthRequest = Device.OnPlatform(BUTTON_WIDTH, BUTTON_WIDTH, BUTTON_WIDTH_WP),
            };
            

            【讨论】:

            • 我用 XAML,会怎么样?