按钮文字的字体大小取决于按钮的大小

时间:2018-11-05 03:06:13

标签: xamarin xamarin.forms

我想根据按钮的大小来调整按钮内文本的大小。我该怎么办?

<Button StyleClass="btnFAF" Text="Field Activity" Grid.Row="0" Grid.Column="0" x:Name="btnFAF" Clicked="btnFAF_Clicked" BorderRadius="6">
    <Button.FontFamily>
        <OnPlatform x:TypeArguments="x:String">
            <On Platform="Android" Value="OpenSans-Regular.ttf#OpenSans-Regular"/>
        </OnPlatform>
    </Button.FontFamily>
 </Button>

2 个答案:

答案 0 :(得分:0)

如果您的目标不是低锯齿的Android低版本(<21以下),我建议您采取一种解决方法。 您可以创建一个具有定义的FontSize的“标准字体”按钮,然后对其应用Scale以使其变大:该按钮和文本将进行相应缩放。

<ui:MyButton Scale="1.5" x:Name="MyBigButton"/>

答案 1 :(得分:0)

您可以使用custom renderer

  

表格

public MainPage()
{
   InitializeComponent();

   Content = new StackLayout
    {
      Children = { 
       new MyButton {
                     Text="XXXXXXXXXXXXX",
                     WidthRequest=50,
                     HeightRequest=20
                    }
                  },
        VerticalOptions = LayoutOptions.CenterAndExpand,
        HorizontalOptions = LayoutOptions.CenterAndExpand,
    };


}

您可以定义Button的子类

namespace App11
{
   public class MyButton:Button
    {
        public MyButton()
        {

        }
    }
}
  

在iOS中

[assembly: ExportRenderer(typeof(MyButton), typeof(MyiOSButton))]
namespace xxx.iOS
{
  class MyiOSButton:ButtonRenderer
  {
    public MyiOSButton()
    {

    }

    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);

        if(Control!=null)
        {
            Control.TitleLabel.SizeToFit();
            Control.TitleLabel.AdjustsFontSizeToFitWidth = true;
        }

     }


  }

}
  

在Android中

[assembly:ExportRenderer(typeof(MyButton),typeof(MyAndroidClass))]
namespace _1111111.Droid
{

  public class AutoFitButton:Android.Widget.Button
  {
    public AutoFitButton(Context context):base(context)
    {

    }

    protected override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);
        SetAutoSizeTextTypeWithDefaults(AutoSizeTextType.Uniform);
    }
  }

  public class MyAndroidClass:ButtonRenderer
  {

    IElementController ElementController => Element as IElementController;

    public MyAndroidClass(Context context):base(context)
    {

    }


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

        if(Control!=null)
        {

            SetNativeControl(new AutoFitButton(Context));
        }

    }

    protected override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);

    }


   }

}
  

注意:方法 SetAutoSizeTextTypeWithDefaults(AutoSizeTextType.Uniform)仅在Android O(API 26)之后可用。