我试图以编程方式更改单个EditText的全息下划线颜色。我已经尝试了所有可以在SO上找到的例子,但似乎没有任何效果。这是我最新和最好的尝试:
编辑:当前代码:
txtName.Background.ClearColorFilter();
txtName.Background.SetColorFilter(Android.Graphics.Color.ParseColor("#ff0000"), PorterDuff.Mode.SrcIn);
我也试过使用txtName.Background.SetTint(Resource.Color.colorRed)
,但这也不起作用。
EditText XML:
<EditText
android:id="@+id/input_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
android:maxLength="30"
android:singleLine="true"
android:scrollHorizontally="true"
android:hint="Name"
android:textColor="#8c8c8c"
android:textColorHint="#8c8c8c"
app:backgroundTint="#22d6d3"
android:layout_marginBottom="10dp" />
编辑 - 这是最终工作的代码:
ViewCompat.SetBackgroundTintList(txtName, Android.Content.Res.ColorStateList.ValueOf(Color.Red));
仅在使用Appcompat库时才更新。
我建议你试一试
ViewCompat.SetBackgroundTintList(_YourView , ColorStateList.ValueOf(Color.ParseColor(#ff0000))));
在您的情况下,_YourView意味着您想要更改其颜色的EditText和值采用Android图形颜色,因此它易于使用
如果你要支持Android API-19或更低版本,另一个建议是使用appcompat EditText。
正如这篇文章所述:EditText underline below text property
设置颜色:
editText.getBackground()。setColorFilter(color,PorterDuff.Mode.SRC_IN);
要删除颜色:
。editText.getBackground()clearColorFilter();
还有其他变化,如How to consistently set EditText Selected Underline Color Programatically我测试了setColorFilter,它适用于我的应用程序。
感谢@ Large的回答,他的答案适用于使用java的原生Android。
在Xamarin.Android中,它与Native Android相同,请执行以下操作:
txtName.Background.SetColorFilter(Android.Graphics.Color.ParseColor("#ff0000"), PorterDuff.Mode.SrcIn);
或者使用android的颜色资源,如下所示:
txtName.Background.SetColorFilter(Color.Red, PorterDuff.Mode.SrcIn);
不要使用new Color(Resource.Color.colorRed)
,因为在Android中不推荐使用getResources().getColor(int id)方法。
您可以创建自定义渲染器以格式化EditText的样式
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Background = new ColorDrawable(Android.Graphics.Color.Transparent);
}
}