【问题标题】:How to change the color of searchbar search icon and cancel button color in xamarin forms如何在 xamarin 表单中更改搜索栏搜索图标的颜色和取消按钮颜色
【发布时间】:2021-05-18 06:27:40
【问题描述】:

如何从 xaml 更改搜索栏图标的颜色,我想更改 xamarin 表单应用程序中搜索栏的取消和搜索图标颜色。如何实现。请帮忙解决这个问题

【问题讨论】:

    标签: xamarin.forms searchbar


    【解决方案1】:

    正如adamm所说,您可以通过CancelButtonColor修改“取消按钮颜色”。

    同样,如果你想在 iOS 中实现一个自定义的 SearchBar,你也可以为它创建一个自定义的渲染器。

    对于UISearchBar,可以通过SearchTextField.LeftView.TintColor修改图标颜色。

    [assembly: ExportRenderer(typeof(MySearchBar), typeof(MySearchBarRenderer))]
    namespace searchbar.iOS
    {
        public class MySearchBarRenderer : SearchBarRenderer
        {
            protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
            {
                base.OnElementChanged(e);
    
                if (Control != null)
                {
                    Control.BackgroundColor = UIColor.Yellow;
                    UISearchBar searchbar = Control as UISearchBar;
                    searchbar.SearchTextField.LeftView.TintColor = UIColor.Orange;
                    // UPDATE
                    var clearButton = searchbar.SearchTextField.ValueForKey((Foundation.NSString)"clearButton") as UIButton;
                    //clearButton.SetTitleColor(UIColor.Blue, UIControlState.Normal);
                    //clearButton.TintColor = UIColor.Orange;
                    clearButton.SetImage(UIImage.FromBundle("CloseIcon.png"), UIControlState.Normal);
                }
            }
        }
    }
    

    【讨论】:

    • 但是当我尝试像这些 Searchbar 一样更改取消图标颜色(X)时,SearchTextField.RightView.TintColor=UIColor.Orange。 ,包含搜索栏的页面未加载。
    • @Aswathy 您可以通过“ValueForKey”获得“清除按钮”。在我的测试中,“TintColor”不起作用。所以我改为设置按钮图像。
    【解决方案2】:

    取消按钮颜色可以通过设置CancelButtonColor来改变:

            <SearchBar Placeholder="Search items..."
               CancelButtonColor="Orange"
               PlaceholderColor="Orange"
               TextColor="Orange"
               TextTransform="Lowercase"
               HorizontalTextAlignment="Center"
               FontSize="Medium"
               FontAttributes="Italic" />
    

    对于图标颜色,您需要使用自定义渲染器。 例如,在 Android 上,您可以创建一个新文件(类似于 SearchBar.Droid.cs)并将其添加到其中:

    using Android.Content;
    using Android.Widget;
    using Xamarin.Forms;
    using Xamarin.Forms.Platform.Android;
    
    [assembly: ExportRenderer(typeof(Xamarin.Forms.SearchBar), typeof(MyApp.Renderers.SearchBarIconColorCustomRenderer))]
    namespace MyApp.Renderers
    {
        public class SearchBarIconColorCustomRenderer : SearchBarRenderer
        {
            public SearchBarIconColorCustomRenderer(Context context) : base(context) { }
    
            protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
            {
                base.OnElementChanged(e);
                var icon = Control?.FindViewById(Context.Resources.GetIdentifier("android:id/search_mag_icon", null, null));
                (icon as ImageView)?.SetColorFilter(Color.Orange.ToAndroid());
            }
        }
    }
    

    编辑: 对于 iOS,尝试这样的事情(我没有测试过):

    using UIKit;
    using Xamarin.Forms;
    using Xamarin.Forms.Platform.iOS;
    
    [assembly: ExportRenderer(typeof(Xamarin.Forms.SearchBar), typeof(MyApp.iOS.Renderers.iOSSearchBarIconColorCustomRenderer))]
    namespace MyApp.iOS.Renderers
    {
            public class iOSSearchBarIconColorCustomRenderer : SearchBarRenderer
            {
                protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
                {
                    base.OnElementChanged(e);
                    
                    if (Control != null)
                    {
                        var searchbar = (UISearchBar)Control;
                        searchbar.TintColor = UIColor.Orange;
                    }
                }
            }    
    }
    

    【讨论】:

    • 如何在ios中实现同样的
    • 我为 iOS 添加了渲染器。没有测试过,如果可以的话请试一试。我认为 Kyle 的 iOS 答案应该可以,我不确定你为什么会遇到问题。
    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多