Xamarin.Forms:删除Button内的填充

tes*_*ing 11 button padding xamarin xamarin.forms

我想要一个小按钮.按钮的高度为30.在某些平台(Android,UWP)上,按钮内的文本被切断.那是因为文本和外边框之间有填充.

一种选择是使按钮更大,但文本有足够的空间.是否有设置内部填充的选项?

Sve*_*übe 8

在Android上,您可以使用样式进行此操作。

资源/values-v21/styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="myTheme" parent="android:Theme.Material">
    <item name="android:buttonStyle">@style/noPaddingButtonStyle</item>
  </style>

  <style name="noPaddingButtonStyle" parent="android:Widget.Material.Button">
    <item name="android:paddingLeft">0dp</item>
    <item name="android:paddingRight">0dp</item>
  </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

将自定义主题设置为应用程序主题。

<application android:label="$safeprojectname$" android:theme="@style/myTheme"></application>
Run Code Online (Sandbox Code Playgroud)

它将左右边距设置为0dp。默认样式带有填充。

这适用于Android> =5。如果要支持较低的android版本,则必须添加多个样式文件夹并使用其他基本主题,例如Theme.HoloTheme.AppCompat


或者您去渲染器:

using App6.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Button), typeof(ZeroPaddingRenderer))]
namespace App6.Droid
{
    public class ZeroPaddingRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            Control?.SetPadding(0, Control.PaddingTop, 0, Control.PaddingBottom);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您必须创建一个具有可绑定属性`Padding`的自定义Xamarin.Forms控件`MyButton:Button`,然后使用显示的渲染器,但要使用`[assembly:ExportRenderer(typeof(MyButton),typeof(ZeroPaddingRenderer))]`一步一步https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/entry/ (2认同)

Dav*_*idS 7

一种选择是使用Label而不是Button,并使用TapGestureRecognizer而不是Click事件.Label使您可以更好地控制文本的布局而不是Button,但是您无法将其转换为每个平台上的本机按钮控件.

  • 我经常这样做。但我注意到与按钮相比,Android 上的性能受到了影响。1) 您必须准确地点击文本(有时很细)并且 2) 附加命令的触发速度不如按钮快。 (2认同)
  • TapGestureRecognizers 也会与 ScrollViews 冲突。 (2认同)
  • 您可以作弊并在标签顶部添加透明框视图,然后在框上添加点击手势。然而,按钮围绕命令提供了更多行为,而不仅仅是识别点击,因此我尝试尽可能多地使用它们。 (2认同)

Mar*_*ván 0

也许您可以使用FontSize来适应按钮HeightRequest,除非您需要创建自定义渲染器来设置填充。