我想根据按钮的大小来调整按钮内文本的大小。我该怎么办?
<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>
答案 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)之后可用。