C# 更改SearchView搜索图标Xamarin.Android
我正在尝试更改SearchDerrer Android自定义渲染器中的搜索图标 这就是我所尝试的C# 更改SearchView搜索图标Xamarin.Android,c#,xamarin,xamarin.forms,xamarin.android,C#,Xamarin,Xamarin.forms,Xamarin.android,我正在尝试更改SearchDerrer Android自定义渲染器中的搜索图标 这就是我所尝试的 Control.Iconified = false; Control.SetIconifiedByDefault(false); var searchView = Control.FindViewById<ImageView>(Resource.Id.search_button); var searchicon = Resources.GetDrawable(Resource.
Control.Iconified = false;
Control.SetIconifiedByDefault(false);
var searchView = Control.FindViewById<ImageView>(Resource.Id.search_button);
var searchicon = Resources.GetDrawable(Resource.Drawable.search);
searchView.SetImageDrawable(searchicon);
Control.Iconified=false;
控件。SetIconifiedByDefault(false);
var searchView=Control.findviewbyd(Resource.Id.search_按钮);
var searchicon=Resources.GetDrawable(Resource.Drawable.search);
searchView.SetImageDrawable(searchicon);
但是,searchIcon始终为空
当我遍历SearchView的子项时,我找到了ID为16909229的图像视图,但是如果您使用的是
android.support.v7.widget.SearchView
,则设置该子项的图像可绘制并没有改变搜索图标,您可以尝试如下设置:
var searchIcon = (ImageView) searchView.FindViewById(Resource.Id.search_mag_icon);
searchIcon.SetImageResource(Resource.Drawable.my_custom_search_icon);
[assembly:ExportRenderer(typeof(SearchBar), typeof(MySearchBarRenderer))]
namespace yourprjectnamespace
{
public class MySearchBarRenderer : SearchBarRenderer
{
public MySearchBarRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.SearchBar> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var searchView = Control;
int searchViewCloseButtonId = Control.Resources.GetIdentifier("android:id/search_mag_icon", null, null);
var closeIcon = searchView.FindViewById(searchViewCloseButtonId);
(closeIcon as ImageView).SetImageResource(Resource.Mipmap.icon);
}
}
}
}
来源:这不是同一个问题,但它与之相关,答案中包含了一种设置方法
我正在尝试更改SearchDerrer Android自定义渲染器中的搜索图标
按如下方式修改代码:
var searchIcon = (ImageView) searchView.FindViewById(Resource.Id.search_mag_icon);
searchIcon.SetImageResource(Resource.Drawable.my_custom_search_icon);
[assembly:ExportRenderer(typeof(SearchBar), typeof(MySearchBarRenderer))]
namespace yourprjectnamespace
{
public class MySearchBarRenderer : SearchBarRenderer
{
public MySearchBarRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.SearchBar> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var searchView = Control;
int searchViewCloseButtonId = Control.Resources.GetIdentifier("android:id/search_mag_icon", null, null);
var closeIcon = searchView.FindViewById(searchViewCloseButtonId);
(closeIcon as ImageView).SetImageResource(Resource.Mipmap.icon);
}
}
}
}
[程序集:ExportRenderer(typeof(搜索栏)、typeof(mySearchBarnderer))]
名称空间yourprjectnamespace
{
公共类mySearchBallenderer:SearchBallenderer
{
公共MySearchBallenderer(上下文):基(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
var searchView=控制;
int searchViewCloseButtonId=Control.Resources.GetIdentifier(“android:id/search\u mag\u icon”,null,null);
var closeIcon=searchView.FindViewById(searchViewCloseButtonId);
(关闭图标作为ImageView.SetImageResource(Resource.Mipmap.icon);
}
}
}
}
.这可能对Android有效,但对Xamarin无效。它会引发任何错误吗?为Xamarin修改了代码事实上并非如此,Resource.Id是不同的。您编写了
Resource.Id.search\u按钮
,而我编写了Resource.Id.search\u mag\u图标