web-dev-qa-db-ja.com

下の線の色を変更することは可能ですか?TextBoxの境界線(エントリ)

AndroidXamarin.Formsアプリケーションを作成し、Xamarin.FormsEntryコントロールの下の線の色を変更しようとしています。

次のようなEntryコントロールがあります。

<Entry Text="new cool street"/>

enter image description here

このEntryの下の線の色を、デフォルトの白から私のテーマに合わせてより紫色に変更したいと思います。

可能であれば、Entryを継承するすべてのコントロールに適用されるため、Android Stylesを使用して行う方が良いでしょう。

これは可能ですか?

14
user1

すべてのエントリに影響するカスタムレンダラーを使用できます。

androidの場合:

[Assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))]
namespace Android.MyRenderers
{
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control == null || e.NewElement == null) return;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                Control.BackgroundTintList = ColorStateList.ValueOf(Color.White);
            else
                Control.Background.SetColorFilter(Color.White, PorterDuff.Mode.SrcAtop);
         }    
    }
}

およびiOS:

[Assembly: ExportRenderer (typeof(Entry), typeof(MyEntryRenderer))]
namespace iOS.MyRenderers
{
    public class MyEntryRenderer : EntryRenderer
    {
        private CALayer _line;

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged (e);
            _line = null;

            if (Control == null || e.NewElement == null)
                return;

            Control.BorderStyle = UITextBorderStyle.None;

            _line = new CALayer {
                BorderColor = UIColor.FromRGB(174, 174, 174).CGColor,
                BackgroundColor = UIColor.FromRGB(174, 174, 174).CGColor,
                Frame = new CGRect (0, Frame.Height / 2, Frame.Width * 2, 1f)
            };

            Control.Layer.AddSublayer (_line);
        }
    }
}

これに関するWindowsソリューションについてはわからない

30
root

同じ問題が発生し、styles.xml(inXamarin.AndroidcolorAccent値を変更するだけでしたproject)は、カーソルの色とEntryフィールドの下の境界線を変更します。

<item name="colorAccent">#BA55D3</item>
10
Curiousity

コンテンツページには1つの背景色があり、ダイアログには別の背景色があるので、スタイルを使用して下部バーの色を指定するのはまったく間違った答えです。そして、OPはAndroidについてのみ尋ねたので、これはAndroidだけです...

カスタムレンダラーを使用して、下部バーの色をテキストの色と同じに設定します。 ElementChangedとPropertyChangedの両方が必要です。

[Assembly: ExportRenderer(typeof(Xamarin.Forms.Entry), typeof(CustomEntryRenderer))]
namespace XamFormsConnect.Droid
{
    public class CustomEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null && e.NewElement != null)
            {
                var entry = (Xamarin.Forms.Entry)e.NewElement;
                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                    Control.BackgroundTintList = ColorStateList.ValueOf(entry.TextColor.ToAndroid());
                else
                    Control.Background.SetColorFilter(entry.TextColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == "TextColor")
            {
                var entry = (Xamarin.Forms.Entry)sender;
                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                    Control.BackgroundTintList = ColorStateList.ValueOf(entry.TextColor.ToAndroid());
                else
                    Control.Background.SetColorFilter(entry.TextColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
            }
        }
    }
}
5
djunod

シンプル:res/values/colors.xmlを次のように編集します:#303F9F

#303F9Fの代わりに任意の16進カラーコードを配置できます

<color name="colorPrimaryDark">#303F9F</color>
3
Ram Koti

使用できるもう1つの単純な視覚的ソリューションは、この行を非表示にすることです。

<Grid>
   <Entry Placeholder="Your Entry"/>
   <BoxView BackgroundColor="White" HeightRequest="10"/>
</Grid>

ハードコード化された色を使用する代わりに、独自のコンポーネントを作成することで改善できます。

0
Bb23

root のiOSカスタムレンダラーで幅またはy位置が正しく動作しない場合は、解決策が見つかりました。

  1. エントリとさらに2つの変数をクラスフィールドとして含めます。
private CustomEntry _entry;
private double _yPos;
private double _width;
  1. OnElementChangedの値を割り当てます。
if (e.NewElement != null)
    _entry = e.NewElement as CustomEntry;
  1. OnElementPropertyChangedに次を含めます。
if (e.PropertyName == "Width")
{
    _width = _entry.Width;
}
else if (e.PropertyName == "Height")
{
    _yPos = _entry.Height;
}
_line.Frame = new CGRect(0, _yPos, _width, 1f);
0
mahclark

Xamarin Formsを使用している場合は、Mobile.Droid、リソース、値に移動し、「Your Colur」で機能します。