Programing

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

lottogame 2020. 8. 12. 22:06
반응형

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


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

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


더하다

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

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

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

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


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

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

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

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

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

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


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>

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

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

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

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에 대해 노출합니다. :)


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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

항목 이름 "android : editTextColor"> yourcolor

끝난.

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


응 우리는 할 수있어,

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

해피 코딩 !!!!


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

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

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

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


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/


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

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

위의 테마 사용자 지정 :

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

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

android : textColorHint-> 힌트 색상

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


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

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

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

Change it, and its done!

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

Styles;

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

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

I am using Holoeverywhere Library. Note the org.holoeverywhere.R.id.search_src_text


I found a solution from a blog post. See here.

Basically you style searchViewAutoCompleteTextView and have android:actionBarWidgetTheme inherit the style.


it works with me

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

What worked for me

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

I tried and find one solution for this. I think it will help you..

searchView.setBackgroundColor(Color.WHITE);

enter image description here


You can implement like this class to change font color and image ::

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

I hope it can help you guys. :D

참고URL : https://stackoverflow.com/questions/11321129/is-it-possible-to-change-the-textcolor-on-an-android-searchview

반응형