【问题标题】:Xamarin Entry bottom line color doesn`t changeXamarin Entry 底线颜色不会改变
【发布时间】:2018-07-29 00:51:09
【问题描述】:

所以我正在开发 Android 应用程序。现在我正在创建 MainPage ,我在其中插入 Entry ,它一如既往地具有底线。我的预览器上的底线是White,而在我的手机上它似乎是Black

所以为了解决这个问题,我决定使用渲染器,看看我是否可以解决它。 我在 App 中创建了名为 CustomEntryRenderer 的类,它继承自 Entry。 然后我在 App.Android 中创建了名为 CustomEntryRednererAndroid 的类,它应该改变底部输入行的颜色。但这不影响它。我尝试对在互联网上找到的一些自定义渲染器做同样的事情。

例如删除底线也不会影响程序: removing line

来自 MainPage.xaml 的条目:

<Entry 

        Grid.Row="4"
        Grid.ColumnSpan="2"
        TextColor="Silver"         
        Placeholder="Write Your nickname"
        PlaceholderColor="Silver"

        />

CustomEntryRenderer:

 public class CustomEntryRenderer : Entry
{
}

CustomEntryRendererAndroid:

[assembly: ExportRenderer(typeof(CustomEntryRenderer), typeof(MyEntryRenderer))]
namespace App3.Droid
{
public class MyEntryRenderer : EntryRenderer
{

    public MyEntryRenderer(Context context) : base(context) { }
    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(Android.Graphics.Color.White);
        else
            Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);
    }
}

}

Top answer for Android 出于某种原因,在CustomEntryRendererAndroid.cs 中我也不得不使用Android.Graphic 而不是Xamarin.Forms.Color。但我认为这不是问题。

我已经尝试了几个小时,但找不到摆脱这种情况的方法。 任何想法都将不胜感激。

【问题讨论】:

    标签: c# android visual-studio xamarin xamarin.forms


    【解决方案1】:

    在 xaml 中,您使用的是默认的 Entry 控件,而不是您的渲染器正在影响的 CustomEntryRenderer。此外,您可能想要重命名它,因为它实际上不是您的渲染器,而是您的自定义控件。

    要解决您的问题,您可以将渲染器 typeof(CustomEntryRenderer) 更改为 typeof(Entry),以默认影响应用中的所有 Android 条目。例如,这适用于我的所有条目的测试应用程序:

    [assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))]
    namespace YourNameSpace
    {
        public class MyEntryRenderer : EntryRenderer
        {
            public MyEntryRenderer(Context context) : base(context) { }
    
            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(Android.Graphics.Color.White);
                else
                    Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);
            }
        }
    }
    

    另一种选择是在MainPage 中切换您的xaml 代码以实际使用您的自定义控件。例如&lt;local:CustomEntryRenderer/&gt;

    【讨论】:

    • 感谢您的回答!我尝试将typeof(CustomEntryRenderer) 更改为typeof(Entry),但在这样做并使用Live Player 启动我的应用程序之后。 xamarin Live 只是崩溃了。每次我尝试并尝试使用不同的渲染器。您还知道为什么预览器显示的线条颜色与手机上启动的应用不同吗?
    • 我更新了我的答案以更具体。如果您只是将其更改为 Entry,您可以删除您的 CustomEntryRender 类。之后,我会确保删除 bin 和 obj 文件夹并重建您的项目。至于我上次尝试使用的 Xamarin Live Previewer,它仍然存在超级错误并且仍在开发中,所以如果可能的话,我会直接部署到设备上。
    • 非常感谢!这解决了问题,我也必须直接在手机上进行部署。
    【解决方案2】:

    Styles.xml 中添加它会全局修复它

    <item name="colorControlNormal">#1BB8A3</item>"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多