2017-10-23 20 views
0

XamarinのAndroidとXamarinの両方のiOSの検索バーをアプリケーションで使用する必要があります。検索Xamarinフォームのバースタイルの変更

私のアプリケーションでは、以下の検索バーを達成する必要があります。

enter image description here enter image description here

マイ検索バーは、Android xamarinから強調表示された行を削除する必要があり、以下のようになり

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

、XAMLで使用されるコードを見つけてください。 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: 画像のように検索バーコントロールを達成する必要があります。私はそれを検索中に検索バーに表示されているキャンセル単語を削除する必要があります。また、周囲の半径を取り除く必要があります。

誰でもこれについて提案しますか?

+0

コードを投稿してください。 –

+0

@ YorkShen-MSFTに詳細が追加されました。これをお勧めします。 – cheran

答えて

1

の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を見つけることができます。 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; 

    } 
} 
+0

アンドロイドで正常に動作します。 Xamarin.iOS用の検索バーレンダラーにOnElementChangedイベントで前述のコードを入れました。しかし、それは動作しません。また、検索バーに入力中に表示されているテキストをキャンセルする – cheran

+0

代わりに 'OnElementPropertyChanged'を使用してください。私は私の答えを更新しました。 –

関連する問題