web-dev-qa-db-ja.com

Xamarinフォームでエントリのトップパディングを設定する方法

Xamarinフォームアプリケーションで、iOSのエントリコントロールの上部のパディングを設定する必要があります。エントリ用のレンダラーを作成しましたが、左と右のパディングを設定できるのは自分だけです。私を助けてください。以下は私のエントリーレンダラーです

public class CustomRenderer: EntryRenderer
{
    protected override void OnElementChanged (ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged (e);
        if (Control != null) {
            Control.LeftView = new UIView (new CGRect (0, 0, 15, 0));
            Control.LeftViewMode = UITextFieldViewMode.Always;

        }
    }

}
9
Aneesh.A.M

これを実現するには、次の2つのことを行う必要があります。

  1. Xamarin.FormsのEntryの高さを増やします
  2. IOSカスタムレンダラーを作成して、テキストをUITextFieldの下部に揃えます enter image description here

Xamarin.Formsのエントリの高さを増やす

この例では、RelativeLayoutを使用して、埋め込みエントリの高さを50、Constraint.Constant(50)に設定します。

using System;

using Xamarin.Forms;

namespace CustomEntrySample
{
    public class EntryWithTopPadding : Entry
    {
    }

    public class App : Application
    {
        public App()
        {
            var normalEntry = new Entry
            {
                Text = "This Entry Has Normal Padding",
                BackgroundColor = Color.Lime
            };

            var paddedEntry = new EntryWithTopPadding
            {
                Text = "This Entry Has Extra Top Padding",
                BackgroundColor = Color.Aqua
            };

            var mainLayout = new RelativeLayout();
            mainLayout.Children.Add(
                normalEntry,
                Constraint.Constant(0),
                Constraint.RelativeToParent(parent => parent.Y + 10),
                Constraint.RelativeToParent(parent => parent.Width)
            );
            mainLayout.Children.Add(
                paddedEntry,
                Constraint.Constant(0),
                Constraint.RelativeToView(normalEntry, (parent, view) => view.Y + view.Height + 10),
                Constraint.RelativeToParent(parent => parent.Width),
                Constraint.Constant(50)
            );

            MainPage = new NavigationPage(
                new ContentPage
                {
                    Title = "Title",
                    Content = mainLayout,
                    Padding = new Thickness(10, 0, 10, 0)
                }
            );
        }
    }
}

UITextFieldの下部にテキストを揃えるカスタムレンダラーを作成する

VerticalAlignmentUITextFieldプロパティをUIControlContentVerticalAlignment.Bottomに設定します

using UIKit;

using CustomEntrySample;
using CustomEntrySample.iOS;

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[Assembly: ExportRenderer(typeof(EntryWithTopPadding), typeof(EntryWithTopPaddingCustomRenderer))]
namespace CustomEntrySample.iOS
{
    public class EntryWithTopPaddingCustomRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if(Control == null)
                return;

            Control.VerticalAlignment = UIControlContentVerticalAlignment.Bottom;
        }
    }
}
5
Brandon Minnick

これを使用して、入力セルにパディングを設定します。

IOS:

Control.LeftView = new UIView(new CGRect(0,15,0,0));
Control.LeftViewMode = UITextFieldViewMode.Always;
Control.RightView = new UIView(new CGRect(0,10, 0, 0));
Control.RightViewMode = UITextFieldViewMode.Always;

Androidでのパディング:

Control.SetPadding(0, 10, 0, 0);

したがって、特定の位置からテキストを開始するように値を設定できます。

0
Narendra Sharma