Android SearchView에서 텍스트 색상을 변경할 수 있습니까?


115

SearchView 요소에는 텍스트 색상을 변경하기위한 속성이 없습니다. 기본 텍스트 색상은 검은 색이며 어두운 배경에서는 작동하지 않습니다. 해킹에 의존하지 않고 텍스트의 색상을 변경할 수있는 방법이 있습니까?

텍스트 크기 변경과 관련된 유사한 질문을 찾았지만 지금까지 답변이 없습니다. SearchView TextSize를 설정하는 방법?


1
나는 이것에 대한 대답을 원합니다.
TheLettuceMaster

당신이 시도한 것을 언급하십시오.
Sahil Mahajan Mj

답변:


121

더하다

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

부모 테마로 변경하면 입력 한 텍스트가 변경됩니다. 당신은 또한 사용할 수 있습니다

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

SearchView에 대한 힌트 텍스트를 변경합니다. ( @android:color/white사용하려는 적절한 값으로를 바꿀 수 있습니다.)


1
이것은 나를 위해 그것을 고쳤고, 성찰을 사용하는 복잡한 헛소리를 포함하지 않았습니다. appcompat에서도 작동합니다.
dj_bushido

searchview의 android : theme를 android : editTextColor 요소가있는 스타일로 설정할 수도 있습니다. 이렇게하면 해당 검색보기에만 영향을줍니다.
Pepijn 2015-08-26

2
효과가있다! ...) 작품 매력, 나는 도구 모음 내의 검색보기를 사용하고, ThemeOverlay.AppCompat.Light을 확장하고 위의 항목을 추가하고 도구 모음 위젯에 스타일을 설정
codename_47

이 솔루션은 나를 위해 작동하지 않습니다. 텍스트의 색상이 여전히 잘못되었습니다. 프로그래밍 방식으로 힌트 색상을 설정하는 아래의 대답은 저에게 효과적이었습니다.
Dominik 2017 년

4
이 답변의 문제는의 텍스트 색상도 변경된다는 것입니다 EditText. SearchView텍스트 색상 만 변경하는 유일한 솔루션 은 다음과 같습니다. stackoverflow.com/a/40550067/1617737
ban-geoengineering

95

다음과 같이 시도하십시오 : 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);

나는 우아한 솔루션을 좋아합니다
Mohsen Afshin

29
이 항상 null을 반환합니다
danielrvt-sgb

ActionBarSherlock을 사용하는 경우보기 ID가 달라집니다. 예를 들어, lib는 현재 편집 텍스트 ID를 "package : id / abs__search_src_text"로 설정하며, R.id.abs__search_src_text를 통해 직접 액세스 할 수 있습니다.
greg7gkb 2013 년

3
또한 실제로 변경하고 싶었던 것은 textView.setHintTextColor ()를 통해 쉽게 수행되는 SearchView 힌트 텍스트 색상이었습니다.
greg7gkb 2013 년

3
이것은 매우 더러운 해킹입니다. 대신 akdotcom이 제안한 것처럼 android : editTextColor 및 android : textColorHint 사용
Philipp Hofmann

69

이것은 나를 위해 작동합니다.

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

1
TextView 또는 AutoCompleteTextView로보기를 가져 오는 경우에도 작동합니다.
Juan José Melero Gómez

예, 이것은 나를 위해 작업 @ JuanJoséMeleroGómez의 제안 다음 이후
Parth 파텔을

나는 이것이 내 대답에서 복사되고 단축되었다고 생각합니다 : stackoverflow.com/a/26251197/2914140 .
CoolMind

24

비슷한 일을하고 싶었습니다. 나는 마침내 아이들 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;
}

3
나도 이전 솔루션에서 null 예외가 발생했으며 이것은 나를 위해 일했습니다!
Diego Ponciano 2014-08-14

1
수락 된 답변으로 표시되어야합니다. 위의 것은 null을 제공합니다. 좋은 일 친구 주셔서 감사합니다 :)
blueware

3
이 솔루션은 너무 역겹지만 실제로 작동하는 유일한 솔루션이며 비난 할 Android 팀입니다!
Ofek Ron 2015

이것으로 검색 아이콘에 어떻게 액세스 할 수 있습니까?
Yasin Yaqoobi

17

@CzarMatt 덕분에 AndroidX를 추가 했습니다. 지원을 .

나를 위해 다음 작품. 링크에서 코드를 사용했습니다 . 지원 라이브러리를 사용하여 작업 표시 줄에서 검색 힌트의 텍스트 색상을 변경합니다 .

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

    EditText txtSearch = ((EditText)searchView.findViewById(androidx.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>"));

1
androidx.appcompat.R.id.search_src_text프로젝트를 AndroidX로 마이그레이션 한 경우 사용 합니다.
CzarMatt

16

이것은 사용자 정의 스타일을 통해 가장 잘 달성됩니다. 사용자 지정 스타일로 작업 표시 줄 위젯 스타일을 오버로드합니다. 어두운 액션 바가있는 홀로 라이트의 경우 다음과 같은 자신의 스타일 파일에 넣으십시오 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>

여기에 링크 설명 입력에 설명 된대로 애플리케이션이 테마 사용자 정의 테마를 사용하고 있는지 확인 하십시오.


14

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>

+1 이것은 findViewById imho와 관련된 모든 솔루션을 능가합니다. 가능하면 뷰 스타일을 사용해야합니다.
Mattias

이것이 받아 들여진 대답이어야합니다! 매우 깨끗하고 쉽습니다.
MSeiz5

8

사용하는 경우-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);

Kotlin에서

val searchView = SearchView(this)
val editText = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
editText.setTextColor(Color.WHITE)

차라리 지금 androidx 지원 라이브러리 사용을 시작해야합니다.


7

당신을위한 스타일 만들기 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"
    ...

6

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

그들은 appcompat이 아닌 SearchView에 대해 공개적으로 id를 노출하지 않지만 어디를 볼지 알고 있다면 AppCompat에 대해 노출합니다. :)


이것은 실제로 다양한 장치에서 꽤 잘 작동합니다. 멋지네요.
Shark

5

나는이 문제가 있었고 이것은 나를 위해 작동합니다.

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

4
나는 항상 null을 얻습니다 : (TextView) searchView.findViewById (id);
danielrvt-sgb

4

Holo 테마를 기반으로 앱 테마를 설정하면 SearchView에 검은 색 텍스트 대신 흰색이 표시됩니다.

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

더러운 해킹을 사용하지 않고 searchview의 텍스트 색상을 변경하는 다른 방법을 찾지 못했습니다.


1
작동하지 않았습니다. "마법의"뷰 ID를 수동으로 검색하는 것보다 훨씬 더 깔끔하기 때문에 저는 그렇게되기를 바랐습니다. 레이아웃이 어두운 배경 인 활동으로 여러 테마를 시도했지만 SearchView에서 검은 색 텍스트 외에는 아무것도 생성하지 않았습니다.
E-Riz 2013

4

가장 깨끗한 방법은 다음과 같습니다.

툴바는 ThemeOverlay.AppCompat.Dark.Actionbar 테마를 사용합니다.

이제 다음과 같이 자식을 만드십시오.

toolbarStyle 부모 "ThemeOverlay.AppCompat.Dark.Actionbar"

이 항목을 해당 스타일로 추가

항목 이름 "android : editTextColor"> yourcolor

끝난.

한 가지 더 중요한 것은 툴바에 layout_height = "? attr / actionbarSize"를 입력하는 것입니다. 기본적으로 wrap_content입니다. 나를 위해 텍스트는 searchview에서 보이지도 않았고 그 문제를 해결했습니다.


4

네, 다음과 같은 방법으로 가능합니다.

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

그것을 사용 하여이 방법을 사용하여 힌트에 빨간색 * 표시를 성공적으로 추가했습니다. 요구 사항에 따라이 방법을 변경해야합니다. 도움이 되었기를 바랍니다. .... :)


나에게는 다소 복잡합니다.
gaols

1
String text = "<font color = # 8c8c8c>"+ HintMessage + "</ font>"; argEditText.setHint (Html.fromHtml (text)); 당신의 깡통은 또한 설정 색상 힌트 만이 두 라인의 코드를 사용
DynamicMind

1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); 그게 내 해결책이긴하지만 네가 내 것보다 낫다고 생각해. 너의 해결책을 사용할 게, 고마워.
gaols

@gaols 당신은 해결책이 있습니다 ..?
DynamicMind

@gaols, "com.android.internal.R.id.search_src_text"는 어디에 있습니까?
wangqi060934 2013 년

3

이것을 사용하십시오, 맞습니다. :디

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

3

응 우리는 할 수있어,

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

해피 코딩 !!!!


3

이것은 나를 위해 일하고 있습니다.

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

3

입력 한 텍스트의 색상 변경 :

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

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

1

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. Google이 SearchView곧 의보기 계층 구조를 변경하기로 결정하지 않는 한 잠시 동안이 방법으로 위젯의 모양을 변경할 수 있습니다.


1

appcompat v7 라이브러리를 사용하여 searchview를 사용자 정의 할 수 있습니다. appcompat 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>

활동은 Activity 대신 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" >

자세한 내용은 다음 URL을 참조하십시오
여기에 http://www.jayway.com/2014/06/02/android-theming-the-actionbar/


1

searchView가있는 appcompat-v7 툴바의 경우 (MenuItemCompat을 통해 제공됨) :

툴바 테마를 @ style / ThemeOverlay.AppCompat.Light로 설정하면 힌트 텍스트와 입력 된 텍스트에 대해 어두운 색 (검정)이 표시되지만 커서 * 색에는 영향을주지 않습니다. 따라서 툴바 테마를 @ style / ThemeOverlay.AppCompat.Dark로 설정하면 힌트 텍스트와 입력 된 텍스트에 밝은 색상 (흰색)이 생성되며 커서 *는 어쨌든 흰색이됩니다.

위의 테마 사용자 지정 :

android : textColorPrimary-> 입력 된 텍스트의 색상

editTextColor-> 입력 된 텍스트의 색상 (설정된 경우 android : textColorPrimary의 영향을 재정의 함)

android : textColorHint-> 힌트 색상

* 참고 : 반사 솔루션을 사용하지 않고 커서 색상을 제어 할 수있는 방법은 아직 결정되지 않았습니다.


커서 색상은 colorControlActivated에서 온다
헨리

1

이를 사용하여 검색보기에서 입력 한 색상 텍스트를 변경할 수있었습니다.

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

1

와. 많은 답변. 기본 색상에서 색상 값을 가져옵니다.

변경하고 완료되었습니다!

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

1

androidx로 툴바에서 searchView 스타일을 변경하십시오.

먼저 툴바 스타일에서 검색보기 스타일을 설정합니다 (자신의 앱 기반으로 부모를 변경).

     <!-- toolbar style -->
      <style name="ToolbarStyle" parent="Theme.AppCompat.Light.NoActionBar">     
          <!-- search view about -->
          <item name="android:editTextColor">@color/colorWhitePrimaryText</item>
          <item name="android:textColorHint">@color/colorWhiteSecondaryText</item>
          <item name="android:textCursorDrawable">@drawable/drawable_cursor_white</item>
          <item name="closeIcon">@mipmap/ic_close</item>
          <item name="searchHintIcon">@mipmap/ic_search_white</item>
          <item name="searchIcon">@mipmap/ic_search_white</item>
          <item name="android:longClickable">false</item>
          <item name="android:queryHint">@string/toolbar_search</item>
      </style> 

그런 다음 툴바 레이아웃에서 사용합니다.

android:theme="@style/ToolbarStyle"

이를 통해 쿼리 힌트를 제외한 대부분의 searchView 스타일을 변경할 수 있습니다.

마지막으로 툴바 메뉴의 옵션에서 쿼리 힌트를 설정합니다.

toolbar.setOnMenuItemClickListener(item -> {
        switch (item.getItemId()){
            case R.id.toolbar_search:
                SearchView searchView = (SearchView) item.getActionView();
                searchView.setQueryHint("default query");
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String newText) {
                        return false;
                    }
                });
                return true;
                default:
                    return false;
        }

"searchView 스타일"아래에 무언가를 게시하려고 하셨나요?
DavidW

내 솔루션을 완성하고 단순화했습니다. 도움이 될 수 있습니다.
user2333

0
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 Library를 사용하고 있습니다. org.holoeverywhere.R.id.search_src_text를 참고하십시오 .


0

블로그 게시물에서 해결책을 찾았습니다. 여기를 참조 하십시오 .

기본적으로 searchViewAutoCompleteTextView의 스타일을 지정하고 android : actionBarWidgetTheme가 스타일을 상속 받도록합니다.


0

그것은 나와 함께 작동한다

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


0

Kotlin 언어의 경우

    searchView = view.findViewById(R.id.searchView_Contacts)
    // change color
    val id = searchView.context.resources
        .getIdentifier("android:id/search_src_text", null, null)

    val textView = searchView.findViewById<View>(id) as TextView

    textView.setTextColor(Color.WHITE)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.