搜索Xamarin Forms中的栏样式更改

时间:2017-10-23 16:42:46

标签: xamarin.ios xamarin.forms xamarin.android

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

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

enter image description here enter image description here

请找到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>

我的搜索栏如下图所示,需要从xamarin android中删除突出显示的行。 enter image description here 还可以找到搜索栏渲染器代码,

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);
            }
        }

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

Xamarin iOS: 我必须像图片中那样实现搜索栏控制。我必须在搜索时删除搜索栏中显示的取消词。还需要去除其周围的半径。

有人建议吗?

1 个答案:

答案 0 :(得分:3)

在Android中,您可以通过id找到search_plate并将其设置为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);
} 

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

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;

    }
}