Có thể thay đổi màu văn bản trên Android SearchView không?


115

Phần tử SearchView không có bất kỳ thuộc tính nào để thay đổi màu văn bản. Màu văn bản mặc định là màu đen và không hoạt động trên nền tối của chúng tôi. Có cách nào để thay đổi màu sắc của văn bản mà không cần dùng đến hack không?

Tôi đã tìm thấy câu hỏi tương tự này liên quan đến việc thay đổi kích thước văn bản, nhưng cho đến nay, nó không có bất kỳ câu trả lời nào : Làm thế nào để đặt SearchView TextSize?


1
Tôi rất thích một câu trả lời cho điều này.
TheLet MobileMaster

hãy đề cập đến những gì bạn đã thử.
Sahil Mahajan Mj

Câu trả lời:


121

Thêm vào

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

sang chủ đề chính và điều đó sẽ thay đổi văn bản đã nhập. Bạn cũng có thể dùng

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

để thay đổi văn bản gợi ý cho Chế độ xem tìm kiếm. (Lưu ý rằng bạn có thể thay thế @android:color/whitebằng bất kỳ giá trị thích hợp nào mà bạn muốn sử dụng)


1
Điều này đã khắc phục nó cho tôi và không liên quan đến bất kỳ trò tai quái phức tạp nào bằng cách sử dụng phản xạ. Cũng hoạt động với appcompat.
dj_bushido

Bạn cũng có thể đặt android: theme trên searchview thành kiểu có phần tử android: editTextColor. Bằng cách này, bạn chỉ ảnh hưởng đến lượt tìm kiếm đó.
Pepijn

2
Nó hoạt động! Tôi đang sử dụng chế độ xem tìm kiếm bên trong thanh công cụ, mở rộng ThemeOverlay.AppCompat.Light và thêm mục ở trên và đặt kiểu trên tiện ích Thanh công cụ;) Hoạt động như một sự quyến rũ ...
codename_47

Giải pháp này không hiệu quả với tôi. Văn bản vẫn còn sai màu. Câu trả lời dưới đây với việc thiết lập màu gợi ý theo lập trình phù hợp với tôi.
Dominik

4
Vấn đề với câu trả lời này là nó cũng sẽ thay đổi màu văn bản của EditTexts của bạn . Giải pháp duy nhất mà đã làm việc cho tôi rằng thay đổi SearchViewmàu chữ thôi thì ở đây: stackoverflow.com/a/40550067/1617737
ban-địa kĩ thuật

96

Hãy thử một cái gì đó như sau: Bạn sẽ nhận được một xử lý đối với chế độ xem văn bản từ sdk và sau đó thay đổi nó vì họ không hiển thị nó công khai.

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

Tôi thích các giải pháp thanh lịch
Mohsen Afshin

29
Đây allways trả về NULL
danielrvt-SGB

Lưu ý rằng nếu bạn đang sử dụng ActionBarSherlock, các ID chế độ xem sẽ khác. Ví dụ: lib hiện đặt ID văn bản chỉnh sửa thành "package: id / abs__search_src_text", có thể được truy cập trực tiếp qua R.id.abs__search_src_text.
greg7gkb

3
Ngoài ra, những gì tôi thực sự muốn thay đổi là màu văn bản gợi ý SearchView, được thực hiện dễ dàng thông qua textView.setHintTextColor ().
greg7gkb

3
Đây là một vụ hack rất bẩn thỉu. Sử dụng Android: editTextColor và Android: textColorHint thay vì như akdotcom gợi ý
Philipp Hofmann

69

Điều này làm việc cho tôi.

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
Điều này cũng hoạt động nếu bạn có được dạng xem dưới dạng TextView hoặc thậm chí dưới dạng AutoCompleteTextView.
Juan José Melero Gómez

Có, đây là công việc đối với tôi sau khi làm theo gợi ý của @ JuanJoséMeleroGómez
Parth Patel.

Tôi cho rằng, điều này đã được sao chép và rút ngắn từ câu trả lời của tôi tại đây: stackoverflow.com/a/26251197/2914140 .
CoolMind

24

Tôi muốn làm điều gì đó tương tự. Cuối cùng tôi phải tìm TextViewtrong số những SearchViewđứa trẻ:

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

Nếu bạn muốn sử dụng phương pháp:

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
Tôi cũng nhận được ngoại lệ vô hiệu với các giải pháp trước đó và điều này đã hiệu quả với tôi!
Diego Ponciano

1
Đây phải được đánh dấu là câu trả lời được chấp nhận. Cái trên cho giá trị null. Cảm ơn vì bạn đã làm việc tốt :)
blueware

3
Giải pháp này thật kinh tởm nhưng nó là giải pháp duy nhất thực sự hoạt động và đó là nhóm Android đáng trách!
Ofek Ron

Làm cách nào để chúng tôi truy cập biểu tượng tìm kiếm với cái này?
Yasin Yaqoobi

17

Nhờ @CzarMatt, tôi đã thêm hỗ trợ AndroidX .

Đối với tôi những công trình sau đây. Tôi đã sử dụng mã từ một liên kết: Thay đổi màu văn bản của gợi ý tìm kiếm trong thanh tác vụ bằng thư viện hỗ trợ .

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

Thay đổi màu sắc văn bản gợi ý của chế độ xem thanh hành động đưa ra giải pháp khác. Nó hoạt động nhưng chỉ đặt văn bản gợi ý và màu sắc.

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

1
Sử dụng androidx.appcompat.R.id.search_src_textnếu bạn đã di chuyển dự án của mình sang AndroidX.
CzarMatt

16

Điều này đạt được tốt nhất thông qua các phong cách tùy chỉnh. Ghi đè kiểu tiện ích thanh tác vụ với kiểu tùy chỉnh của riêng bạn. Đối với ánh sáng holo với thanh tác vụ tối, hãy đặt nó vào tệp kiểu của riêng bạn, chẳng hạn như 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>

Đảm bảo rằng ứng dụng của bạn đang sử dụng chủ đề tùy chỉnh chủ đề như được mô tả trong mô tả liên kết nhập vào đây


14

Bạn có thể làm như vậy bằng cách đặt editTextColorthuộc tính trong kiểu.

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

và bạn áp dụng phong cách này cho Toolbarhoặc SearchViewtrong bố cục.

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

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

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

+1 Điều này vượt trội tất cả các giải pháp liên quan đến imho findViewById. Kiểu xem nên được sử dụng bất cứ khi nào có thể.
Mattias

Đây phải là câu trả lời được chấp nhận! Rất sạch sẽ và dễ dàng.
MSeiz5,

8

nếu bạn sử dụng - 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)

Bạn nên bắt đầu sử dụng các thư viện hỗ trợ androidx ngay bây giờ


7

Tạo một phong cách cho Toolbar

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

Và đặt nó làm chủ đề cho Toolbar

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

6

Nếu bạn đang sử dụng android.support.v7.widget.SearchView, bạn có thể thực hiện mà không cần phải sử dụng phản chiếu.

Đây là cách tôi đang thực hiện trong ứng dụng của mình:

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

Họ không hiển thị công khai id cho SearchView không ứng dụng, nhưng họ làm cho AppCompat nếu bạn biết nơi để tìm. :)


Điều này thực sự hoạt động khá tốt trên các thiết bị khác nhau. Tốt lắm.
Shark

5

Tôi đã gặp vấn đề này, và điều này phù hợp với tôi.

@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
Tôi luôn nhận được null trên: (TextView) searchView.findViewById (id);
danielrvt-sgb

4

Nếu bạn đặt chủ đề ứng dụng của mình dựa trên chủ đề holo, bạn sẽ nhận được văn bản màu trắng thay vì màu đen trong Chế độ xem tìm kiếm của mình

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

Tôi không tìm thấy bất kỳ cách nào khác để thay đổi màu văn bản của chế độ xem tìm kiếm mà không sử dụng các bản hack bẩn.


1
Điều này đã không hoạt động. Tôi đã hy vọng nó sẽ làm được, vì nó gọn gàng hơn rất nhiều so với việc tìm kiếm ID chế độ xem "ma thuật" theo cách thủ công. Tôi đã thử một số chủ đề, với một hoạt động có bố cục có nền tối, nhưng không có chủ đề nào tạo ra bất kỳ thứ gì khác ngoài văn bản màu đen trong SearchView.
E-Riz

4

Cách sạch nhất là:

Thanh công cụ sử dụng chủ đề ThemeOverlay.AppCompat.Dark.Actionbar.

Bây giờ làm cho đứa trẻ của nó như:

toolbarStyle mẹ "ThemeOverlay.AppCompat.Dark.Actionbar"

thêm mục này theo phong cách đó

tên mục "android: editTextColor"> yourcolor

Làm xong.

Một điều rất quan trọng nữa là, trong thanh công cụ, hãy đặt layout_height = "? Attr / actionbarSize". Theo mặc định, nó là wrap_content. Đối với tôi, văn bản thậm chí không hiển thị trong chế độ xem tìm kiếm, nó đã khắc phục sự cố đó.


4

Có, nó có thể bằng cách sử dụng phương pháp sau đây.

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

Cách gọi của phương thức này trông như thế này ..

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

bằng cách sử dụng nó, tôi đã thêm thành công dấu * màu đỏ trong gợi ý bằng cách sử dụng phương pháp này. Bạn nên thay đổi phương pháp này theo yêu cầu của bạn. Tôi hy vọng nó hữu ích cho bạn .... :)


nó hơi phức tạp đối với tôi.
gaols,

1
String text = "<font color = # 8c8c8c>" + HintMessage + "</font>"; argEditText.setHint (Html.fromHtml (văn bản)); bạn cũng có thể chỉ sử dụng hai mã dòng này để thiết lập gợi ý màu
DynamicMind

1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); đó là giải pháp của tôi, nhưng tôi nghĩ của bạn tốt hơn của tôi, tôi sẽ sử dụng giải pháp của bạn, cảm ơn bạn.
gaols,

@gaols bạn có giải pháp không ..?
DynamicMind

@ gaols, "com.android.internal.R.id.search_src_text" của bạn ở đâu?
wangqi060934

3

Sử dụng cái này, nó đúng. : D

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

3

Có, chúng tôi có thể,

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

Để áp dụng màu trắng cho Văn bản SerachView,

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

Chúc bạn viết mã vui vẻ !!!!


3

điều này đang làm việc cho tôi.

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

Thay đổi màu của văn bản đã nhập:

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

Thay đổi màu của văn bản gợi ý:

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

Một SearchViewđối tượng mở rộng từ LinearLayout, vì vậy nó chứa các khung nhìn khác. Bí quyết là tìm dạng xem đang chứa văn bản gợi ý và thay đổi màu theo chương trình. Vấn đề khi cố gắng tìm chế độ xem theo id là id phụ thuộc vào chủ đề được sử dụng trong ứng dụng. Vì vậy, tùy thuộc vào chủ đề được sử dụng, findViewById(int id)phương thức có thể trả về null. Một cách tiếp cận tốt hơn phù hợp với mọi chủ đề là duyệt qua phân cấp chế độ xem và tìm tiện ích con có chứa văn bản gợi ý:

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

Sử dụng phương pháp này, bạn cũng có thể thay đổi giao diện của các tiện ích con khác trong SearchViewhệ thống phân cấp, chẳng hạn như EditTextgiữ truy vấn tìm kiếm. Trừ khi Google quyết định thay đổi phân cấp chế độ xem của một SearchViewthời gian ngắn, bạn sẽ có thể thay đổi giao diện của tiện ích bằng phương pháp này trong một thời gian.


1

Có thể tùy chỉnh chế độ xem tìm kiếm bằng cách sử dụng thư viện appcompat v7. Tôi đã sử dụng thư viện appcompat v7 và định nghĩa kiểu tùy chỉnh cho nó. Trong thư mục có thể vẽ, hãy đặt tệp bottom_border.xml trông giống như sau:

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

Trong thư mục giá trị 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>

Tôi đã xác định tệp custommenu.xml để hiển thị menu:

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

Hoạt động của bạn nên mở rộng ActionBarActivity thay vì Activity. Đây là phương thức 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);
  }

Trong tệp kê khai:

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

Để biết thêm thông tin, hãy xem url này:
Tại đây http://www.jayway.com/2014/06/02/android-theming-the-actionbar/


1

cho Thanh công cụ appcompat-v7 với SearchView (được cung cấp qua MenuItemCompat):

Đặt chủ đề Thanh công cụ thành @ style / ThemeOverlay.AppCompat.Light sẽ mang lại màu tối (đen) cho văn bản gợi ý và cho văn bản đã nhập, nhưng sẽ không ảnh hưởng đến màu con trỏ *. Theo đó, đặt chủ đề của Thanh công cụ thành @ style / ThemeOverlay.AppCompat.Dark sẽ mang lại màu sáng (trắng) cho văn bản gợi ý và văn bản đã nhập, con trỏ * vẫn sẽ có màu trắng.

Tùy chỉnh các chủ đề trên:

android: textColorPrimary -> màu của văn bản đã nhập

editTextColor -> màu của văn bản đã nhập (sẽ ghi đè ảnh hưởng của android: textColorPrimary nếu được đặt)

android: textColorHint -> màu của gợi ý

* lưu ý: Vẫn chưa xác định được cách kiểm soát màu Con trỏ (mà không sử dụng giải pháp phản chiếu).


Màu con trỏ đến từ colorControlActiised
Henry

1

Bằng cách sử dụng điều này, tôi có thể thay đổi văn bản màu đã nhập trong chế độ xem tìm kiếm

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

1

Chà. Rất nhiều câu trả lời. Nó nhận giá trị màu từ màu chính của bạn.

Thay đổi nó, và nó đã hoàn thành!

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

Phong cách;

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

1

thay đổi kiểu searchView trong thanh công cụ với androidx.

trước tiên, đặt kiểu xem tìm kiếm trong Kiểu thanh công cụ của bạn (thay đổi kiểu gốc của chúng bằng cơ sở ứng dụng của riêng bạn):

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

sau đó, sử dụng nó trong bố cục thanh công cụ của bạn:

android:theme="@style/ToolbarStyle"

với điều này, bạn có thể thay đổi hầu hết kiểu searchView ngoại trừ gợi ý truy vấn.

cuối cùng đặt gợi ý truy vấn tại các tùy chọn của menu thanh công cụ của bạn:

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

Ý của bạn là đăng thứ gì đó theo "kiểu searchView"?
DavidW

Tôi đã hoàn thành và đơn giản hóa giải pháp của mình, có thể nó có thể giúp bạn.
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);

Tôi đang sử dụng Thư viện Holoeverywhere. Lưu ý org.holoeverywhere.R.id.search_src_text


0

Tôi đã tìm thấy một giải pháp từ một bài đăng trên blog. Xem tại đây .

Về cơ bản, bạn tạo kiểu searchViewAutoCompleteTextView và có android: actionBarWidgetTheme kế thừa kiểu.


0

nó hoạt động với tôi

@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

Điều gì đã làm việc cho tôi

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

0

Đối với ngôn ngữ 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.