D.W*_*ski 3 c# android visual-studio xamarin xamarin.forms
所以我正在开发 Android 应用程序。现在,我正在创建 MainPage,我在Entry其中插入了与往常一样具有底线的内容。我的预览器的底线是White在我的手机上它似乎是Black.
所以为了解决这个问题,我决定使用渲染器,看看我是否可以解决它。我在 App 中创建了类,CustomEntryRenderer它是从 Entry 继承的。然后我在 App.Android 中创建了 Class 调用CustomEntryRednererAndroid它应该改变底部输入行的颜色。但它不影响它。我尝试使用我在互联网上找到的一些自定义渲染器来做同样的事情。
例如删除底线也不会影响程序: 删除线
MainPage.xaml 中的条目:
<Entry
Grid.Row="4"
Grid.ColumnSpan="2"
TextColor="Silver"
Placeholder="Write Your nickname"
PlaceholderColor="Silver"
/>
Run Code Online (Sandbox Code Playgroud)
自定义入口渲染器:
public class CustomEntryRenderer : Entry
{
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
}
Android的最佳解答
,由于某种原因还在CustomEntryRendererAndroid.cs我不得不使用Android.Graphic代替Xamarin.Forms.Color。但我不认为这是问题。
我已经尝试了几个小时,但找不到摆脱这种情况的方法。将不胜感激任何想法。
在 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是切换您的 xaml 代码MainPage以实际使用您的自定义控件。例如,<local:CustomEntryRenderer/>
| 归档时间: |
|
| 查看次数: |
4413 次 |
| 最近记录: |