2016-07-05 25 views
3

我在Android上创建Xamarin.Forms应用程序,我试图改变控制下面的行的颜色。是否有可能改变下面的行的颜色/文本框的边界

我有一个Entry控制,像这样:

<Entry Text="new cool street"/> 

enter image description here

我想这Entry从默认线下的颜色改变白色更紫色的搭配我的主题。

Idealy倒不如采用Android样式,因为这将适用于从Entry如果可能的话

继承这是可能做到所有的控制呢?

+0

User android styles。 ' @ android:color/yourcolour' –

+0

@AkashAmin'colorAccent'只有在'TextBox'被关注时才会使用。我正在寻找当'TextBox'未聚焦时更改线条颜色 – user1

+0

[如何更改Xamarin.Forms中Entry的边框颜色]的可能重复(http://stackoverflow.com/questions/37822668/how-to-change -border-color-of-entry-in-xamarin-forms) –

回答

8

您可以使用自定义渲染器会影响到所有的条目,

这里是为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); 
     } 
    } 
} 

不知道这个

+0

你的例子是什么平台,你知道我可以在哪里找到代码来为另外两个平台做这件事吗? – user1

+0

@ user1,这是android,只是增加了iOS – root

+0

谢谢你好!我会看看窗口,并添加它,如果我找到 – user1

2

简单: 编辑您的RES /价值/ colors.xml为: #303F9F

您可以将任何十六进制颜色代码代替#303F9F

<color name="colorPrimaryDark">#303F9F</color> 
+0

我在哪里实现这种颜色以将其应用于我的'Entry'?到目前为止,这只是定义一个新的颜色 – user1

+0

请参阅[https://developer.xamarin.com/guides/android/user_interface/material_theme/](https://developer.xamarin.com/guides/android/user_interface/material_theme/ )更多关于我的意思的信息 – user1

-1

的Windows解决方案,如果您使用的是Xamarin形式,去Mobile.Droid,资源,价值观和对“您Colur”,它会工作。

3

我有同样的问题,只是在styles.xml改变colorAccent值(Xamarin.Android项目)将改变光标的颜色和Entry场的底部边框。

<item name="colorAccent">#BA55D3</item> 
+0

相同aproch它看起来像只有当控件具有焦点时才会改变颜色。 – CodeGrue

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); 
      } 
     } 
    } 
} 
+1

我喜欢这个答案如何使用TextColor属性,而不是像接受的答案那样硬编码“白色”。 – CodeGrue

相关问题