如何从Xamarin Forms for Android中的按钮视图中删除额外的填充?

Xamarin Forms上的按钮视图似乎在部署到Android时会应用额外的填充。 我在我的Android项目下设置了Resources / values / styles.xml,默认情况下所有间距,填充和边距都为0,但仍然应用了额外的填充:

0.0px 0.0 0.0px 0.0px 0.0px 

请看下面的比较,看看我在说什么(左边是iOS,右边是Android)。 请注意iOS中的视图如何相互冲洗(应该如此),而Android中存在不必要的额外空白。 显示器由绝对和堆叠布局,几个按钮和一个标签(长标签)组合而成。 在iOS示例中,不要担心没有大小和排列的东西; 这是故意的。 iOS显示器正是我希望它们看起来的样子。

iOS中的应用程序显示 Android中的应用程序显示

理想情况下,我想要一个Android风格或一个简单的“一刀切”的代码片段,我可以使用它来摆脱Android的固定间距。 边距,间距和填充在两个设备上以相同的方式以编程方式设置,因此不应该是问题的根源。

请注意,我正在使用C#和Xamarin Forms – 而不是XAML。 因此,请提供适用于两者的答案,或至少从纯粹的程序化Xamarin表单实现开始。

这是另一个例子(左边是iOS,右边是Android)。 最外面的布局是一个网格,包含六个非布局视图(两个按钮,两个标签和两个条目)以及底部的堆栈布局(同样包含一个按钮,一个标签和一个条目)。 你可以从颜色的差异看出一切都正确排列,除了按钮。 仅使用视图边距设置对齐; 默认间距和填充都被清零(从Android风格,见上文)。

iOS中的备用应用程序显示 Android中的备用应用程序显示

试试这个:

在Android项目中打开Styles.xml

MyTheme.Base样式内部(我假设基于默认的Xamarin.Forms模板调用这样)添加以下行:

 @style/MyButton 

创建名为MyButton的新样式

  

在Drawable文件夹中添加一个名为button_ripple.xml的新XML文件并粘贴以下代码:

               

此文件是必需的,因为当更改Android中按钮的背景时,纹波效果(点击它时的效果)将丢失。

如果您不关心效果,请返回样式文件, MyButton样式可以是这样的:

  

如果没有CustomRenderers,这可能会有所帮助.-

那么您可以使用此链接中描述的Device.Runtime平台。

基本上,您可以根据操作系统选择保证金类型。

 if(Device.RuntimePlatform == Device.Android) button.margin = new Thickness(0); 

这是你在寻找什么?