2014-09-02 5 views
0

У меня есть Xamarin.Forms SearchBar на StackLayout с темным цветом фона.TextColor of Xamarin.Forms SearchBar

По умолчанию поле ввода также темное, возможно, из-за прозрачного фона. Чтобы изменить цвет фона панели поиска, есть свойство BackgroundColor. (В приведенном ниже примере я установил его темно-серым.)

Но как настроить цвет текста? Нет такого имущества. И даже с помощью настраиваемого средства отображения строки поиска я не нахожу решение.

Вот как это выглядит только с заполнителем:

... и с некоторым входным (черный на довольно темном фоне "Привет, мир!"):

ответ

1

Вы можете достичь этого, создав обычай View, который имеет связующее свойство, как ForegroundTextColor, а затем создать собственный рендерер.

В пользовательской визуализатора вы можете унаследовать от платформы конкретного средства визуализации, то есть на WindowsPhone это: -

Xamarin.Forms.Platform.WinPhone.SearchBarRenderer

Вы можете следить за свойство изменяется на связанное свойство , вы создали и установили собственный контроль платформы Текстовый цвет, который используется для изменения внешнего вида не-editin g вид SearchBar.

Вы также должны следить за IsFocused и применять окраску на WindowsPhone, по крайней мере, также. Это может также применяться и для других платформ.

Update 1: -

========

В ответ на ваш комментарий Вы не должны оказывать в целом SearchBar себя.

Если вы наследуете инструмент рендеринга , вы можете настроить мелочи.

С конкретной ссылкой на Android для достижения этой цели вы должны получить ссылку на AutoCompleteTextView, а затем вы можете вызвать SetTextColor, чтобы изменить цвет.

Update 2: -

==========

SearchBar представляет собой составной элемент управления в Android.

AutoCompleteTextView похоронен довольно глубоко в иерархии.

4.4 это можно найти, используя следующий код. Другие версии могут сильно отличаться. Это отнюдь не хороший подход обязательно для производства с использованием порядковых индексов, однако: -

AutoCompleteTextView objAutoTextView = (AutoCompleteTextView)(((this.Control.GetChildAt(0) as ViewGroup).GetChildAt(2) as ViewGroup).GetChildAt(1) as ViewGroup).GetChildAt(0); 

Где это является визуализатор класса.

Вы можете позвонить objAutoTextView.SetTextColor с цветом для достижения изменения цвета в SearchBar тексте переднего плана.

+0

к сожалению, это решение не позволило мне установить цвет * редактируемые * текст '' 'SearchBar''', кажется, не иметь такое имущество (по крайней мере, на И Roid). И я не хотел отображать всю панель поиска самостоятельно. – Falko

+0

Я обновил свой ответ с обновленной информацией, специфичной для ** Android **, см. (Обновление 1). Этот подход работает без перезаписи SearchBar. – Pete

+0

Я не могу найти '' 'AutoCompleteTextView''' в' '' SearchBar''' или '' 'SearchBarRenderer'''. :/ – Falko

0

я, наконец, нашел очень простое решение:

Я случайно использовал Android Theme @android:style/Theme.Holo.Light и изменить все цвета в явном виде. Но чтобы получить яркий цвет текста на панели поиска, вам лучше использовать @android:style/Theme.Holo.

Это не позволяет установить цвет очень точно, но в этом случае все, что мне нужно, было заменено от черного до белого.

4

Вот код для пользовательского рендеринга Android, который будет делать трюк. Я хотел бы загрузить скриншот, но у меня нет достаточно очков, пока :(

using System; 

using Android.Widget; 
using Android.Text; 
using G = Android.Graphics; 

using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 

[assembly:ExportRenderer(typeof(MySearchBar), typeof(Some.Namespance.MySearchBar_Droid))] 

namespace Some.Namespace 
{ 
    public class MySearchBar_Droid : SearchBarRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> args) 
     { 
      base.OnElementChanged(args); 

      // Get native control (background set in shared code, but can use SetBackgroundColor here) 
      SearchView searchView = (base.Control as SearchView); 
      searchView.SetInputType(InputTypes.ClassText | InputTypes.TextVariationNormal); 

      // Access search textview within control 
      int textViewId = searchView.Context.Resources.GetIdentifier("android:id/search_src_text", null, null); 
      EditText textView = (searchView.FindViewById(textViewId) as EditText); 

      // Set custom colors 
      textView.SetBackgroundColor(G.Color.Rgb(225, 225, 225)); 
      textView.SetTextColor(G.Color.Rgb(32, 32, 32)); 
      textView.SetHintTextColor(G.Color.Rgb(128, 128, 128)); 

      // Customize frame color 
      int frameId = searchView.Context.Resources.GetIdentifier("android:id/search_plate", null, null); 
      Android.Views.View frameView = (searchView.FindViewById(frameId) as Android.Views.View); 
      frameView.SetBackgroundColor(G.Color.Rgb(96, 96, 96)); 
     } 
    } 
} 
+0

Теперь вы можете загрузить, я думаю :) – NAZIK

+0

Как изменить цвет поля ввода и значок поиска ??? –

0

Вот как я это сделал, еще один способ:

[assembly: ExportRenderer(typeof (CustomSearchBar), typeof (CustomSearchBarRenderer))] 

namespace Bahai.Android.Renderers 
{ 
public class CustomSearchBarRenderer : SearchBarRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e) 
    { 
     base.OnElementChanged(e); 
     if (e.OldElement == null) 
     { 
      SearchBar element = (SearchBar) this.Element; 
      var native = (global::Android.Widget.SearchView) Control; 

      // do whatever you want to the controls here! 
      //-------------------------------------------- 
      // element.BackgroundColor = Color.Transparent; 
      // native.SetBackgroundColor(element.BackgroundColor.ToAndroid()); 
      // native.SetBackgroundColor(Color.White.ToAndroid()); 

      //The text color of the SearchBar/SearchView 
      AutoCompleteTextView textField = (AutoCompleteTextView) 
       (((Control.GetChildAt(0) as ViewGroup) 
        .GetChildAt(2) as ViewGroup) 
        .GetChildAt(1) as ViewGroup) 
        .GetChildAt(0); 

      if (textField != null) 
       textField.SetTextColor(Color.White.ToAndroid()); 
     } 
    } 
    } 
} 
1

Вы можете внести следующие изменения в XAML, если вы используете XAML, чтобы получить другой цвет текста в строке поиска на различных платформах:.

<SearchBar x:Name="Search" 
      Placeholder="Search"  
      TextChanged="SearchBar_OnTextChanged" 
      SearchButtonPressed="OnSearch" BackgroundColor="#19588F"> 
     <SearchBar.TextColor> 
      <OnPlatform x:TypeArguments="Color"> 
        <OnPlatform.iOS> 
         Black 
        </OnPlatform.iOS> 
        <OnPlatform.Android> 
         White 
        </OnPlatform.Android> 
        <OnPlatform.WinPhone> 
         White 
        </OnPlatform.WinPhone> 
      </OnPlatform> 
     </SearchBar.TextColor> 
</SearchBar> 
+0

Это помогло мне изменить цвет шрифта. –

Смежные вопросы