Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改SearchView搜索图标Xamarin.Android_C#_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

C# 更改SearchView搜索图标Xamarin.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.

我正在尝试更改SearchDerrer Android自定义渲染器中的搜索图标

这就是我所尝试的

 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图标