【发布时间】:2016-07-10 22:45:57
【问题描述】:
我想要一个小按钮。按钮的高度为 30。在某些平台(Android、UWP)上,按钮内的文本被截断。那是因为文本和外边框之间有一个填充。
一种选择是使按钮更大,但文本有足够的空间。是否有设置内部填充的选项?
【问题讨论】:
标签: button xamarin padding xamarin.forms
我想要一个小按钮。按钮的高度为 30。在某些平台(Android、UWP)上,按钮内的文本被截断。那是因为文本和外边框之间有一个填充。
一种选择是使按钮更大,但文本有足够的空间。是否有设置内部填充的选项?
【问题讨论】:
标签: button xamarin padding xamarin.forms
现在 Xamarin 允许您在 XAML 中执行类似的操作:
<Button.Padding>
<Thickness>0</Thickness>
</Button.Padding>
或者在 C# 中:
Button button = new Button();
button.Text = "Button";
button.Clicked += OnClicked;
button.Padding = new Thickness(0, 0, 0, 0);
【讨论】:
在 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>
AndroidManifest.xml
将自定义主题设置为应用程序主题。
<application android:label="$safeprojectname$" android:theme="@style/myTheme"></application>
将左右边距设置为0dp。默认样式有填充。
这适用于 Android >= 5。如果您想支持较低的 android 版本,则必须添加多个样式文件夹并使用其他基本主题,例如 Theme.Holo 或 Theme.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);
}
}
}
【讨论】:
Padding 创建自定义 Xamarin.Forms 控件 MyButton : Button,然后使用显示的渲染器,但使用 [assembly: ExportRenderer(typeof(MyButton), typeof(ZeroPaddingRenderer))] 这是一步一步 developer.xamarin.com/guides/xamarin-forms/custom-renderer/…跨度>
Thickness 而不是 bool。
一种选择是使用 Label 而不是 Button,并使用 TapGestureRecognizer 而不是 Click 事件。与 Button 相比,Label 为您提供了对文本布局的更多控制,但您无法获得将其转换为每个平台上的本机按钮控件的优势。
【讨论】:
GestureRecognizers 实现Button 的Pressed 和Released 事件?我需要有关点击/单击/鼠标按下持续时间的信息。
也许您可以使用FontSize 来适应按钮HeightRequest,除非您需要创建自定义渲染器来设置填充。
【讨论】:
FontSize,但如果我想让它完美,我需要自定义渲染器。