是否有可能改变在Android搜索查看的文本颜色?是否有可能改变在Android搜索查看的文本颜色?

2019-06-14 14:27发布

该搜索查看元素没有改变文字颜色的属性。 默认文本颜色为黑色和我们黑暗的背景不起作用。 有没有办法来改变文字的颜色,而不诉诸黑客?

我发现与改变文字大小,这类似的问题,但到目前为止,它没有任何的答案: 如何设置搜索查看TEXTSIZE?

Answer 1:

<item name="android:editTextColor">@android:color/white</item>

父主题,应该改变输入的文本。 您还可以使用

<item name="android:textColorHint">@android:color/white</item>

要更改搜索查看的提示文本。 (请注意,您可以更换@android:color/white与任何适当的值,你希望使用)



Answer 2:

尝试是这样的:你会得到一个处理从SDK TextView的,然后改变它,因为他们不公开揭露它。

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);


Answer 3:

这对我的作品。

SearchView searchView = (SearchView) findViewById(R.id.search);
EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));


Answer 4:

我想要做类似的事情。 我终于找到了TextView跻身SearchView孩子:

for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
    textView.setTextColor(Color.WHITE);
}

如果你想使用util方法:

public static <V extends View> Collection<V> findChildrenByClass(ViewGroup viewGroup, Class<V> clazz) {

    return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>());
}

private static <V extends View> Collection<V> gatherChildrenByClass(ViewGroup viewGroup, Class<V> clazz, Collection<V> childrenFound) {

    for (int i = 0; i < viewGroup.getChildCount(); i++)
    {
        final View child = viewGroup.getChildAt(i);
        if (clazz.isAssignableFrom(child.getClass())) {
            childrenFound.add((V)child);
        }
        if (child instanceof ViewGroup) {
            gatherChildrenByClass((ViewGroup) child, clazz, childrenFound);
        }
    }

    return childrenFound;
}


Answer 5:

这最好是通过自定义样式来实现的。 过载动作栏插件风格,自己的自定义样式。 对于黑暗行动起来吧全息光,把这个在自己的样式文件,如res/values/styles_mytheme.xml

<style name="Theme.MyTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item>
    <!-- your other custom styles -->
</style>

<style name="Theme.MyTheme.Widget" parent="@android:style/Theme.Holo">
    <item name="android:textColorHint">@android:color/white</item>
    <!-- your other custom widget styles -->
</style>

确保您的应用程序使用主题自定义主题中的说明在此处输入链接的描述



Answer 6:

对我来说,以下的作品。 我使用的代码的链接: 使用支持库更改搜索提示的文本颜色在动作条 。

    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    EditText txtSearch = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));
    txtSearch.setHint(getResources().getString(R.string.search_hint));
    txtSearch.setHintTextColor(Color.LTGRAY);
    txtSearch.setTextColor(Color.WHITE);

更改操作栏搜索查看提示文本颜色通知:另一种解决方案。 它的工作原理,但仅设置提示文字和颜色。

    searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));


Answer 7:

您可以通过设置这样做editTextColor在样式属性。

<style name="SearchViewStyle" parent="Some.Relevant.Parent">
    <item name="android:editTextColor">@color/some_color</item>
</style>

并应用这种风格到Toolbar或者SearchView布局。

<android.support.v7.widget.Toolbar
    android:theme="@style/SearchViewStyle">

    <android.support.v7.widget.SearchView />

</android.support.v7.widget.Toolbar>


Answer 8:

如果您使用的android.support.v7.widget.SearchView,这是可能的,而不必使用反射。

以下是我正在做我的应用程序:

EditText text = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);

if (searchPlate != null) {
    searchPlate.setBackgroundResource(R.drawable.search_background);
}

if (text != null){
    text.setTextColor(resources.getColor(R.color.white));
    text.setHintTextColor(getResources().getColor(R.color.white));

    SpannableStringBuilder magHint = new SpannableStringBuilder("  ");
    magHint.append(resources.getString(R.string.search));

    Drawable searchIcon = getResources().getDrawable(R.drawable.ic_action_view_search);
    int textSize = (int) (text.getTextSize() * 1.5);
    searchIcon.setBounds(0, 0, textSize, textSize);
    magHint.setSpan(new ImageSpan(searchIcon), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    // Set the new hint text
    text.setHint(magHint);

}

if (searchCloseIcon != null){
    searchCloseIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_close));
}

他们不暴露IDS公开的非程序兼容性搜索查看,但他们对程序兼容性做,如果你知道去哪里找。 :)



Answer 9:

如果你使用 - android.support.v7.widget.SearchView

SearchView searchView = (SearchView) item.getActionView();
EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
editText.setTextColor(Color.WHITE);


Answer 10:

我有这个问题,这对我的作品。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.customer_menu, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView       = (SearchView) menu.findItem(R.id.menu_customer_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        searchView.setOnQueryTextListener(this);

        //Applies white color on searchview text
        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);

        return true;
}


Answer 11:

为您创建一个样式Toolbar

<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:editTextColor">@color/some_color</item>
</style>

并将其设置为为主题的Toolbar

<android.support.v7.widget.Toolbar
    android:theme="@style/AppTheme.Toolbar"
    ...


Answer 12:

是的,它是可以用下面的方法。

public static EditText setHintEditText(EditText argEditText, String argHintMessage, boolean argIsRequire) {
    try {
        if (argIsRequire) {
            argHintMessage = "   " + argHintMessage;
            //String text = "<font color=#8c8c8c>"+argHintMessage+"</font> <font color=#cc0029>*</font>";
            String text = "<font color=#8c8c8c>" + argHintMessage + "</font>";
            argEditText.setHint(Html.fromHtml(text));
        } else {
            argEditText.setHint(argHintMessage);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return argEditText;
}

这个方法的调用是这样的..

metLoginUserName=(EditText)this.findViewById(R.id.etLoginUserName);
    metLoginPassword=(EditText)this.findViewById(R.id.etLoginPassword);

    /**Set the hint in username and password edittext*/
    metLoginUserName=HotSpotStaticMethod.setHintEditText(metLoginUserName, getString(R.string.hint_username),true);
    metLoginPassword=HotSpotStaticMethod.setHintEditText(metLoginPassword, getString(R.string.hint_password),true);

使用它,我已经成功地在暗示使用此方法添加红色*标记。 你应该根据你的要求改变这种方法。 我希望它有助于你.... :)



Answer 13:

如果你的基础应用主题的全息主题,你会得到一个白色的而不是黑色文本在你的搜索查看

<style name="Theme.MyTheme" parent="android:Theme.Holo">

我没有找到任何其他方式改变搜索查看的文本颜色,而无需使用肮脏的黑客。



Answer 14:

使用这一个,这是正确的。 :d

AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(color.black));
searchText.setTextColor(getResources().getColor(color.black));


Answer 15:

这是为我工作。

final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

searchView.setOnQueryTextListener(this);   
searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
{
    searchEditText.setBackgroundColor(getResources().getColor(R.color.c_trasnparent));
    searchEditText.setGravity(Gravity.CENTER);
    searchEditText.setCompoundDrawables(null,null,R.drawable.ic_cross,null);
}


Answer 16:

最彻底的方法是:

工具栏使用主题ThemeOverlay.AppCompat.Dark.Actionbar。

现在做的是孩子喜欢的:

toolbarStyle父 “ThemeOverlay.AppCompat.Dark.Actionbar”

在风格添加此项目

项目名称 “机器人:editTextColor”> yourcolor

完成。

还有一个很重要的事情是,在工具栏把layout_height =“?ATTR / actionbarSize”。 默认情况下它是wrap_content.For我的文字是不是在搜索查看偶可见它固定的问题。



Answer 17:

我们可以,

SearchView searchView = (SearchView) findViewById(R.id.sv_symbol);

要应用白三色为SerachView文本,

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);

编码愉快!!!!



Answer 18:

更改键入的文本颜色:

((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setTextColor(Color.WHITE);

更改提示文本的颜色:

((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setHintTextColor(Color.LTGRAY);


Answer 19:

SearchView对象从延伸LinearLayout ,所以它保持其它视图。 关键是要找到持有提示文本视图和编程改变颜色。 与试图找到ID的观点的问题在于,该ID是依赖从应用程序中使用的主题。 因此,根据所使用的主题, findViewById(int id)方法可能会返回null 。 更好的方法是与每一个题材的作品是遍历视图层次,并找到包含提示文本的小部件:

// get your SearchView with its id
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// traverse the view to the widget containing the hint text
LinearLayout ll = (LinearLayout)searchView.getChildAt(0);
LinearLayout ll2 = (LinearLayout)ll.getChildAt(2);
LinearLayout ll3 = (LinearLayout)ll2.getChildAt(1);
SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete)ll3.getChildAt(0);
// set the hint text color
autoComplete.setHintTextColor(getResources().getColor(Color.WHITE));
// set the text color
autoComplete.setTextColor(Color.BLUE);

使用这种方法,你也可以改变其他部件的外观SearchView层次,如EditText持搜索查询。 除非谷歌决定改变的视图层次SearchView不久,你应该能够改变widget的外观采用这个方法一段时间。



Answer 20:

这可以通过使用程序兼容性V7 library.I使用程序兼容性V7库,并定义自定义样式为它定制搜索查看。 在绘制文件夹放bottom_border.xml文件,该文件是这样的:

 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 <item>
  <shape >
      <solid android:color="@color/blue_color" />
  </shape>
 </item>
 <item android:bottom="0.8dp"
   android:left="0.8dp"
   android:right="0.8dp">
  <shape >
      <solid android:color="@color/background_color" />
  </shape>
 </item>

 <!-- draw another block to cut-off the left and right bars -->
 <item android:bottom="2.0dp">
  <shape >
      <solid android:color="@color/main_accent" />
  </shape>
  </item>
 </layer-list>

在重视夹styles_myactionbartheme.xml:

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
  <style name="AppnewTheme" parent="Theme.AppCompat.Light">
    <item name="android:windowBackground">@color/background</item>
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item>
  </style> 
  <!-- Actionbar Theme -->
  <style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/main_accent</item>
    <!-- <item name="android:icon">@drawable/abc_ic_ab_back_holo_light</item> -->
  </style> 
  <style name="ActionBarWidget" parent="Theme.AppCompat.Light">
    <!-- SearchView customization-->
     <!-- Changing the small search icon when the view is expanded -->
    <!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> -->
     <!-- Changing the cross icon to erase typed text -->
   <!--   <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> -->
     <!-- Styling the background of the text field, i.e. blue bracket -->
    <item name="searchViewTextField">@drawable/bottom_border</item>
     <!-- Styling the text view that displays the typed text query -->
    <item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item>        
  </style>

    <style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
     <item name="android:textColor">@color/text_color</item>
   <!--   <item name="android:textCursorDrawable">@null</item> -->
    <!-- <item name="android:textColorHighlight">@color/search_view_selected_text</item> -->
  </style>
 </resources>

我定义custommenu.xml文件显示菜单:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:com.example.actionbartheme="http://schemas.android.com/apk/res-auto" >  

  <item android:id="@+id/search"
      android:title="@string/search_title"
      android:icon="@drawable/search_buttonn"
      com.example.actionbartheme:showAsAction="ifRoom|collapseActionView"
        com.example.actionbartheme:actionViewClass="android.support.v7.widget.SearchView"/>        
  </menu>

您的活动应该改为扩大活动的ActionBarActivity。 这是onCreateOptionsMenu方法。

  @Override
  public boolean onCreateOptionsMenu(Menu menu) 
  {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.custommenu, menu);
  }

在清单文件:

  <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppnewTheme" >

欲了解更多信息,请参阅以下网址:
这里http://www.jayway.com/2014/06/02/android-theming-the-actionbar/



Answer 21:

用于与搜索查看(经由MenuItemCompat提供)程序兼容性-V7工具栏:

工具栏的主题设置为@风格/ ThemeOverlay.AppCompat.Light将产生深色(黑色)的提示文本和输入的文本,但不会影响光标*颜色。 因此,工具栏的主题设置为@风格/ ThemeOverlay.AppCompat.Dark将产生浅色(白色)的提示文本和输入的文本,光标*将是白色的反正。

自上述主题:

安卓:textColorPrimary - >输入文字的颜色

editTextColor - >输入文本的颜色(将覆盖了Android的影响:textColorPrimary如果设置)

安卓:textColorHint - >提示的颜色

*注:上午尚未确定光标颜色是如何被控制(不使用反射解决方案)。



Answer 22:

通过使用此我能够改变搜索视图键入的文本颜色

AutoCompleteTextView typed_text = (AutoCompleteTextView) inputSearch.findViewById(inputSearch.getContext().getResources().getIdentifier("android:id/search_src_text", null, null));
typed_text.setTextColor(Color.WHITE);


Answer 23:

哇。 很多答案。 它从你的原色得到的颜色值。

改变它,和它的完成了!

@Override
public void onResume() {
    super.onResume();
    getActivity().setTheme(R.style.YourTheme_Searching);
}

样式;

<style name="YourTheme.Searching" parent="YourTheme">
    <item name="android:textColorPrimary">@android:color/white</item>
</style>


Answer 24:

searchView = (SearchView) view.findViewById(R.id.searchView);

SearchView.SearchAutoComplete searchText = (SearchView.SearchAutoComplete) searchView
      .findViewById(org.holoeverywhere.R.id.search_src_text);
searchText.setTextColor(Color.BLACK);

我使用Holoeverywhere库。 注意org.holoeverywhere.R.id.search_src_text



Answer 25:

TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);


Answer 26:

我发现,从一个博客帖子的解决方案。 见这里 。

基本上你的风格searchViewAutoCompleteTextView并有安卓actionBarWidgetTheme继承的风格。



Answer 27:

它与我

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem searchItem = menu.findItem(R.id.action_search);
    EditText searchEditText = (EditText) searchView.getActionView().findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchEditText.setTextColor(getResources().getColor(R.color.white));
    searchEditText.setHintTextColor(getResources().getColor(R.color.white));
    return super.onPrepareOptionsMenu(menu);
}


Answer 28:

什么工作对我来说

((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));


Answer 29:

我试图找到这一个解决方案。 我认为这将帮助你..

searchView.setBackgroundColor(Color.WHITE);



Answer 30:

您可以实现这样的类来改变字体颜色和图像::

import com.actionbarsherlock.widget.SearchView;
import com.actionbarsherlock.widget.SearchView.SearchAutoComplete;


public class MySearchView {
    public static SearchView getSearchView(Context context, String strHint) {
        SearchView searchView = new SearchView(context);
        searchView.setQueryHint(strHint);
        searchView.setFocusable(true);
        searchView.setFocusableInTouchMode(true);
        searchView.requestFocus();
        searchView.requestFocusFromTouch();

         ImageView searchBtn = (ImageView) searchView.findViewById(R.id.abs__search_button);
         searchBtn.setImageResource(R.drawable.ic_menu_search);


         ImageView searchBtnClose = (ImageView) searchView.findViewById(R.id.abs__search_close_btn);
         searchBtnClose.setImageResource(R.drawable.ic_cancel_search_bar);


         SearchAutoComplete searchText = (SearchAutoComplete) searchView.findViewById(R.id.abs__search_src_text);

        searchText.setTextColor(context.getResources().getColor(color.white));

        return searchView;
    }


    public static SearchView getSearchView(Context context, int strHintRes) {
        return getSearchView(context, context.getString(strHintRes));
    }
}

我希望它可以帮助你们。 :d



文章来源: Is it possible to change the textcolor on an Android SearchView?