Xamarin Forms上的按钮视图似乎在部署到Android时会应用额外的填充。我在我的Android项目下设置了Resources / values / styles.xml,默认情况下所有间距,填充和边距都为0,但仍然应用了额外的填充:
<item name="android:radius">0.0px</item>
<item name="android:shadowRadius">0.0</item>
<item name="android:spacing">0.0px</item>
<item name="android:padding">0.0px</item>
<item name="android:layout_margin">0.0px</item>
请查看以下对比,了解我所谈论的内容(左侧为iOS,右侧为Android)。请注意iOS中的视图如何相互冲洗(应该如此),而Android中存在不必要的额外空白。显示器由绝对和堆叠布局,几个按钮和一个标签(长标签)组合而成。不要担心在iOS示例中没有大小和完美排列的东西;这是故意的。 iOS显示器正是我希望它们看起来的样子。
理想情况下,我喜欢Android风格或简单的“一刀切”代码片段,我可以使用它来摆脱Android的固定间距。边距,间距和填充在两个设备上以相同的方式以编程方式设置,因此不应该成为问题的根源。
请注意,我使用C#和Xamarin表单 - 而不是XAML。因此,请提供适用于两者的答案,或至少从纯粹的程序化Xamarin表单实现开始。
这是另一个例子(左边的iOS,右边的Android)。最外面的布局是一个网格,包含六个非布局视图(两个按钮,两个标签和两个条目)以及底部的堆栈布局(同样包含一个按钮,一个标签和一个条目)。你可以从颜色的不同看出一切都正确排列,除了按钮。仅使用视图边距设置对齐;默认间距和填充都被清零(从Android风格,见上文)。
答案 0 :(得分:4)
试试这个:
在Android项目中打开Styles.xml
在MyTheme.Base
样式内(我假设基于默认的Xamarin.Forms模板调用这样)添加以下行:
<item name="android:buttonStyle">@style/MyButton</item>
创建名为MyButton
<style name="MyButton" parent="android:Widget.Material.Button">
<item name="android:layout_margin">0dip</item>
<item name="android:background">@drawable/button_ripple</item>
</style>
在Drawable文件夹中添加一个名为button_ripple.xml
的新XML文件,并粘贴以下代码:
<?xml version="1.0" encoding="utf-8"?>
<!-- in drawable folder-->
<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="?android:colorAccent" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#ff0000" />
</shape>
</item>
</ripple>
此文件是必需的,因为当更改Android中按钮的背景时,纹波效果(点击它时的效果)会丢失。
如果您不关心效果,请返回样式文件,MyButton
样式可以是这样的:
<style name="MyButton" parent="android:Widget.Material.Button">
<item name="android:layout_margin">0dip</item>
<item name="android:background">#ff0000</item>
</style>
如果没有CustomRenderers,这可能会有所帮助.-
答案 1 :(得分:1)
Xamarin按钮现在包括可以设置为“厚度”的“填充”属性。
Button button = new Button();
button.Text = "Button";
button.Clicked += OnClicked;
button.Padding = new Thickness(0, 0, 0, 0);
答案 2 :(得分:0)
您可以使用此link上描述的Device.Runtime平台。
基本上,您可以根据操作系统选择保证金类型。
if(Device.RuntimePlatform == Device.Android)
button.margin = new Thickness(0);
这是你在找什么?