【问题标题】:Xamarin.Android Change Single EditText Underline ColorXamarin.Android 更改单个 EditText 下划线颜色
【发布时间】:2018-03-05 19:29:02
【问题描述】:

我正在尝试以编程方式更改单个 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));

【问题讨论】:

  • 我已经回答了试试看

标签: android xamarin xamarin.android


【解决方案1】:

更新 仅当您使用 Appcompat 库时才有效。

我建议你试试这个

ViewCompat.SetBackgroundTintList(_YourView , ColorStateList.ValueOf(Color.ParseColor(#ff0000))));

在您的情况下,_YourView 表示您要更改其颜色的 EditText,其值采用 Android 图形颜色,因此易于使用

如果您要支持 Android API-19 或更低版本,另一个建议是使用 appcompat EditText。

【讨论】:

    【解决方案2】:

    如本文所述: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,它适用于我的应用程序。

    【讨论】:

    • 在我的代码中试过这个:txtName.Background.SetColorFilter(new Color(Resource.Color.colorRed), PorterDuff.Mode.SrcIn); 但仍然没有改变颜色。添加新颜色之前是否需要清除颜色?
    【解决方案3】:

    感谢@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),因为getResources().getColor(int id) 方法在Android 中已被弃用。

    【讨论】:

    • 我使用了您的确切代码并在运行 API 21 的模拟器上运行。仍然没有改变颜色。我还设置了断点以确保代码被正确命中,就是这样。从另一个答案回到我的问题,我需要在添加红色之前清除滤色器吗?
    • 你可以用txtName.Background.ClearColorFilter();试试,但我不确定,你能把你的EditText代码和.axml都给我看看吗?
    • 是的,清除也没有用。我用 XML 和当前代码更新了帖子。
    • 您好,我们使用的是EditText 而不是AppCompatEditText,请在您的最低版本和其他版本上尝试EditText 类。
    • 将其更改为常规的 EditText.. 仍然没有。编辑:为了澄清,我还确定并使用 EditText 作为代码中的类型。
    【解决方案4】:

    您可以创建自定义渲染器来格式化 EditText 的样式

     protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
            {
                base.OnElementChanged(e);
                if (Control != null)
                {
                    Control.Background = new ColorDrawable(Android.Graphics.Color.Transparent);
    
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 1970-01-01
      • 2012-09-15
      • 2013-09-05
      • 2016-06-15
      • 1970-01-01
      • 2017-08-03
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多