Xamarin Forms 中的搜索栏样式更改

che*_*ran 2 xamarin.ios xamarin.android xamarin.forms

我需要在 Xamarin Android 和 Xamarin iOS 的应用程序中使用搜索栏。

我必须在我的应用程序中实现以下搜索栏。

在此输入图像描述 在此输入图像描述

请找到xaml中使用的代码,

<Frame Padding="0" OutlineColor="DarkGray" HasShadow="True" HorizontalOptions="FillAndExpand"  VerticalOptions="Center">
                    <SearchBar x:Name="searchBar" Placeholder="Search" PlaceholderColor="LightGray" TextColor="#000000" HorizontalOptions="FillAndExpand" VerticalOptions="Center" TextChanged="SearchBar_TextChanged"/>
                </Frame>
Run Code Online (Sandbox Code Playgroud)

我的搜索栏如下所示,需要从 xamarin android 中删除突出显示的行。 在此输入图像描述 还可以找到搜索栏渲染器代码,

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
        {
            base.OnElementChanged(e);
            var color = global::Xamarin.Forms.Color.LightGray;
            var searchView = (Control as SearchView);
            var searchIconId = searchView.Resources.GetIdentifier("android:id/search_mag_icon", null, null);
            if (searchIconId > 0)
            {
                var searchPlateIcon = searchView.FindViewById(searchIconId);
                (searchPlateIcon as ImageView).SetColorFilter(color.ToAndroid(), PorterDuff.Mode.SrcIn);
            }
            var symbolView = (Control as SearchView);
            var symbolIconId = symbolView.Resources.GetIdentifier("android:id/search_close_btn", null, null);
            if(symbolIconId>0)
            {
                var symbolPlateIcon = symbolView.FindViewById(symbolIconId);
                (symbolPlateIcon as ImageView).SetColorFilter(color.ToAndroid(), PorterDuff.Mode.SrcIn);
            }
        }
Run Code Online (Sandbox Code Playgroud)

Xamarin 安卓: 我使用框架控件在搜索栏中显示边框。我必须删除搜索栏边框底线或边框颜色。

Xamarin iOS: 我必须实现搜索栏控制,如图所示。我必须在搜索时删除搜索栏中显示的取消字。还需要删除其中的半径。

有人对此提出建议吗?

Kev*_* Li 5

在 Android 中,您可以通过找到 search_plateid并将其设置为Transparent,如下所示:

if (Control != null)
{
        var color = global::Xamarin.Forms.Color.LightGray;
        var searchView = Control as SearchView;

        int searchPlateId = searchView.Context.Resources.GetIdentifier("android:id/search_plate", null, null);
        Android.Views.View searchPlateView = searchView.FindViewById(searchPlateId);
        searchPlateView.SetBackgroundColor(Android.Graphics.Color.Transparent);
} 
Run Code Online (Sandbox Code Playgroud)

在iOS中,你可以找到UISearchBar的Textfield,然后自定义它的边框样式。并通过设置为 false 来删除“取消”按钮ShowsCancelButton。例如,像这样:

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (Control != null)
    {
        Control.ShowsCancelButton = false;

        UITextField txSearchField = (UITextField)Control.ValueForKey(new Foundation.NSString("searchField"));
        txSearchField.BackgroundColor = UIColor.White;
        txSearchField.BorderStyle = UITextBorderStyle.None;
        txSearchField.Layer.BorderWidth = 1.0f;
        txSearchField.Layer.CornerRadius = 2.0f;
        txSearchField.Layer.BorderColor = UIColor.LightGray.CGColor;

    }
}
Run Code Online (Sandbox Code Playgroud)