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

时间:2017-06-16 19:48:40

标签: c# android xamarin xamarin.android xamarin.forms

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显示器正是我希望它们看起来的样子。

App display in iOS App display in Android

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

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

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

Alternate app display in iOS Alternate app display in Android

3 个答案:

答案 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);

这是你在找什么?