如何在Android上编辑SearchBar Xamarin Forms的图标?

R.E*_*ant 2 icons android edit searchbar xamarin

我需要你的帮助 !

我从事跨平台的移动开发项目.我使用Visual Studio与Xamarin Forms.我想用SearchBar(Xamarin.Forms类)创建一个页面,但是,我的问题是SearchBar图标的个性化,特别是在Android平台上.我的搜索让我一无所获.如果您知道编辑图标的方法,我将非常感激.(我有一个模型可以遵循,所以我想要改变的图标,而不是颜色).

先感谢您 !

在此输入图像描述

Sus*_*ver 8

在此输入图像描述

自定义渲染器简介

您可以Xamarin.Forms非常轻松地对库存控件进行子类化,以便对控件进行面向平台的小修改.

在上面的示例中,我创建了两个SearchBar子类,一个用于允许自定义图标,另一个用于删除图标,Xamarin.Android渲染类似于:

在此输入图像描述

protected override void OnElementChanged (ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged (e);
    if (Control != null) {
        var searchView = Control;
        searchView.Iconified = true;
        searchView.SetIconifiedByDefault (false);
        // (Resource.Id.search_mag_icon); is wrong / Xammie bug
        int searchIconId = Context.Resources.GetIdentifier ("android:id/search_mag_icon", null, null);
        var icon = searchView.FindViewById (searchIconId);
        (icon as ImageView).SetImageResource (Resource.Drawable.icon);
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

protected override void OnElementChanged (ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged (e);
    if (Control != null) {
        var searchView = Control;
        searchView.Iconified = true;
        searchView.SetIconifiedByDefault (false);
        // (Resource.Id.search_mag_icon); is wrong / Xammie bug
        int searchIconId = Context.Resources.GetIdentifier ("android:id/search_mag_icon", null, null);
        var icon = searchView.FindViewById (searchIconId);
        icon.Visibility = Android.Views.ViewStates.Gone;

    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

@SushiHangover的方法效果很好,但是一旦SearchView获得焦点,图标就会再次出现。为了解决这个问题,我将LayoutParameters用于图标:

if(Control!= null){
    ...
    int searchIconId = Context.Resources.GetIdentifier ("android:id/search_mag_icon", null, null);
    var icon = (ImageView)searchView.FindViewById (searchIconId);
    icon.LayoutParameters = new LinearLayout.LayoutParams (0, 0);
    ...
}
Run Code Online (Sandbox Code Playgroud)