我正在尝试使搜索视图的用户键入的文本为白色。"android:searchViewTextField"给出一个错误。我找不到全局样式的正确名称:
<style name="AppTheme" parent="@style/_AppTheme"/>
<style name="_AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:searchViewTextField">@color/white_color</item>
</style>
是否有全局样式只会影响搜索视图的文本,而不会影响所有文本框?
定义主题"SearchTextViewTheme"
<style name="SearchTextViewTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:textColor">@color/white_color</item>
</style>
然后在文本视图中
<TextView
style="@style/SearchTextViewTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
实际上,应用主题必须在布局 XML 中显式定义。因此,您不必担心主题会影响其他文本框
如果您的 targed SDK 为 20 或更少,则 Goolge 用于设置SearchView
样式的属性是隐藏的,如果您尝试在主题中覆盖它们,您最终会遇到编译错误。
按照本教程,您可以使用 AppCompat v20 SearchView
而不是本机SearchView
。AppCompat 公开searchViewTextField
和searchViewAutoCompleteTextView
等属性以更改AutoCompleteTextView
的样式。
以下是它在 Xamarin
中是如何完成的(我的想法来自 Patrick 的答案):
[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());
}
}
}
}
这起到了作用
<style name="myTheme" parent="@style/Theme.AppCompat.Light">
<item name="android:editTextColor">#fffff</item>
</style>
上述解决方案可能在 java 中工作,但它们在 xamarin 中不起作用,我想这个解决方案将在 java 中工作。