2017-12-18 3 views
0

AndroidでImageを使用してボタンを埋め込むのに問題があります。私はそれがiOSでInsetsを使用して動作しているが、Androidで同じことを達成することはできません。ここでAndroid上の画像でボタンレンダラーにパディングを追加するXamarin

は私のAndroidのレンダラコードです:

public class PaddedButtonRenderer : ButtonRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Button> e) 
     { 
      base.OnElementChanged(e); 
      if (Control != null) 
      { 
       var button = (PaddedButton)Element; 

       Control.ContentEdgeInsets = new UIEdgeInsets((nfloat)button.Padding, (nfloat)button.Padding, (nfloat)button.Padding, (nfloat)button.Padding); 
      } 
     } 
    } 

enter image description here

任意の提案:ここ

public class PaddedButtonRenderer : ButtonRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Button> e) 
     { 
      base.OnElementChanged(e); 
      if (Control != null) 
      { 
       var button = (PaddedButton)Element; 
       UpdatePadding(); 
      } 
     } 

     protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
     { 
      base.OnElementPropertyChanged(sender, e); 
      if (e.PropertyName == nameof(PaddedButton.Padding)) 
      { 
       UpdatePadding(); 
      } 
     } 

     private void UpdatePadding() 
     { 
      var element = Element as PaddedButton; 
      if (element != null) 
      { 
       Control.SetPadding(
        (int)element.Padding, 
        (int)element.Padding, 
        (int)element.Padding, 
        (int)element.Padding); 
      } 
     } 

    } 

enter image description here

私の作業のiOSボタンのですか?私はAndroidでパディングが間違っていると思っています。ありがとう。

+0

はあなたを持っていますあなたの問題を解決しましたか? –

答えて

0

私はあなたのコードをテストアンドロイドXamarin上の画像でボタンレンダラに

をパディングを追加し、それは動作しませんでしたが、あなたはダブルサイズのAnswer @を参照してください可能性があり、それはAndroidiOSの両方で正常に動作します。

まず、あなたがあなたのPaddedButtonPaddingを定義していることを確認してください。

public class EnhancedButton : Button 
{ 
    public static BindableProperty PaddingProperty = BindableProperty.Create(nameof(Padding), typeof(Thickness), typeof(EnhancedButton), default(Thickness), defaultBindingMode: BindingMode.OneWay); 

    public Thickness Padding 
    { 
     get { return (Thickness)GetValue(PaddingProperty); } 
     set { SetValue(PaddingProperty, value); } 
    } 
} 

第二に、あなたはthis.Control.SetPadding()を使用してUpdatePadding()方法で、次のようにコードを変更:

private void UpdatePadding() 
{ 
    var element = this.Element as EnhancedButton; 
    if (element != null) 
    { 
     this.Control.SetPadding(
      (int)element.Padding.Left, 
      (int)element.Padding.Top, 
      (int)element.Padding.Right, 
      (int)element.Padding.Bottom 
     ); 
    } 
} 
+0

申し訳ありません、私は休暇中でした。あなたの解決策は私のパディングが一様であるため左/上/右/下のパディングを指定しない限り、私と同じです。自分のイメージがすでに「正しい」サイズであり、鉱山が大きすぎるためにあなたの作品がおそらく動作します。私のイメージが明らかに大きすぎるまで、この問題は一度も起こりませんでしたが、レンダラーはパディングでサイズを変更できるはずです。私は最終的に 'GestureRecognizer'を使って' RelativeLayout'の中の 'Frame'の上に' Image'を積み重ねて行きました。 –

+0

@WillNasby、あなたの方法で問題を解決した場合は、問題に遭遇した他の人が回答を見ることができるように回答を投稿してください。 –

関連する問題