如何增加开关控制Xamarin表格的大小?

时间:2017-11-01 13:28:52

标签: android xamarin multiplatform

我最近刚刚开始使用Xamarin Forms,并且负责将一个有效的iOS项目切换到Droid。这是一个多平台项目,所以我在共享项目中创建了开关,但试图在.Droid styles.xml或自定义渲染器中管理它的样式。我需要控件对于平板电脑来说要大一些。

使用styles.xml,我可以使用以下行更改开关控件的宽度:

<item name="switchMinWidth">120dp</item>

但据我所知,没有办法以这种方式改变控件的高度。我尝试使用自定义渲染器并使用Control的SetHeight,SetMinHeight和SetMinimumHeight方法(Android.Switch.Widget),但没有任何工作。

以下是目前开关的样子:

https://imgur.com/XIPp6vV

我也尝试在xaml中执行HeightRequest,但它不会改变控件的实际高度。有什么办法让这些开关更高一些吗?

1 个答案:

答案 0 :(得分:2)

  

如何增加开关控制Xamarin表格的大小?

Switch高度由<switch android:track="@drawable/shape_mythumb".../>控制,并且曲目的高度决定了Switch的整体高度。因此,您可以在自定义SwitchRenderer中添加此属性:

public class MySwitchRenderer : SwitchRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Switch> e)
    {
        base.OnElementChanged(e);
        if(Control != null)
        {
            Control.SetTrackResource(Resource.Drawable.track);
        }
    }
}

您需要自定义Track布局,您可以随意绘制形状。

示例:

track.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
      android:drawable="@drawable/switch_track_on"
      android:state_checked="true"/>

  <item
      android:drawable="@drawable/switch_track_off"
      android:state_checked="false"/>

</selector>

switch_track_on.xml

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

  <corners
       android:radius="15dp" />
  <size
       android:width="75dp"
       android:height="25dp" />
  <solid
      android:color="#6decacec" />

</shape>

switch_track_off.xml

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

  <corners
      android:radius="15dp" />
  <size
      android:width="75dp"
      android:height="25dp" />
  <solid
      android:color="#6db3b1b3" />
</shape>