我正在尝试以编程方式更改单个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));
答案 0 :(得分:0)
如本帖所述:EditText underline below text property
设置颜色:
editText.getBackground()。setColorFilter(颜色, PorterDuff.Mode.SRC_IN);
删除颜色:
editText.getBackground()clearColorFilter();
还有其他变体,例如How to consistently set EditText Selected Underline Color Programatically 我测试了setColorFilter,它适用于我的应用程序。
答案 1 :(得分:0)
感谢@ 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)方法。
答案 2 :(得分:0)
<强>更新强> 仅在使用Appcompat库时才有效。
我建议你试一试
ViewCompat.SetBackgroundTintList(_YourView , ColorStateList.ValueOf(Color.ParseColor(#ff0000))));
在您的情况下,_YourView表示您想要更改其颜色的EditText和值采用Android图形颜色,因此它易于使用
如果你要支持Android API-19或更低版本,另一个建议是使用appcompat EditText。
答案 3 :(得分:0)
您可以创建自定义渲染器,以设置EditText样式的格式
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Background = new ColorDrawable(Android.Graphics.Color.Transparent);
}
}