SearchView actionBar içindeki searchview simgesi nasıl silinir veya değiştirilir?

screenshot

Edittext içinde arama görünümü simgesini nasıl kaldırılır veya değiştirilir? Appcompat kitaplığını kullanıyorum.

Aşağıdaki kodu değiştirmek ve kaldırmak için kullandım, ancak çalışmıyor:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    View search_mag_icon = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
        search_mag_icon.setBackgroundResource(R.drawable.ic_stub);
        //search_mag_icon.setVisibility(View.GONE);
3

7 cevap

Sonunda çözümü buldum. Takip etmeyi dene:

try {
    Field mDrawable = SearchView.class.getDeclaredField("mSearchHintIcon");
    mDrawable.setAccessible(true);
    Drawable drawable =  (Drawable)mDrawable.get(your search view here);
    drawable.setAlpha(0);
} catch (Exception e) {
    e.printStackTrace();
}
16
katma
Her şeyi denedikten sonra, benim için çalışan tek çözüm buydu, teşekkürler
katma yazar Chol, kaynak
cevabımı sildim ve arkadaşınızı düzenledim. :)
katma yazar Paresh Dudhat, kaynak
Bir cazibe gibi çalıştı! Teşekkürler.
katma yazar Umarov, kaynak
bu satırın eklenmesi drawable.setBounds (0,0,0,0) , 0 sol dolguyla ipuçlarını görüntülemenizi sağlar, aksi halde yine de şeffaf olan simgenin ardından ipuçları görüntülenir.
katma yazar Umarov, kaynak
Çalışıyor ancak bir uyarı gösteriyor mSearchHintIcon alanlarına ve var olmayan veya görünmeyen yöntemlere yansıtıcı erişimi algılıyor
katma yazar Aashish, kaynak
İşe yarayan tek şey!
katma yazar Sudheesh Mohan, kaynak

AppCompat v21 blog yazısı , SearchView 'a göre, arama simgesi gibi şeyleri geçersiz kılan özel bir stil sağlayabilirsiniz:





4
katma
Bu simgeyi ipucundan tamamen kaldırmak istiyor, yerine kullanmıyor.
katma yazar Solace, kaynak
'u denedim, bu bana Dize türlerine izin verilmez (' 'değerine sahip' searchIcon'da '). ' bu konuda bana biraz rehberlik eder misiniz? Bunu kendin denedin mi?
katma yazar Solace, kaynak
İşe yaramadı = (Aslında, bu tarzların hiçbiri uygulanmadı,
katma yazar Solace, kaynak
@Solace - hiçbir şeyle değiştirme == onu kaldırma
katma yazar ianhanniballake, kaynak
@Solace - yalnızca boş değil, @null kullanmanız gerekir.
katma yazar ianhanniballake, kaynak
Bu, aslında bugün için çalışan bu yazıdaki tek cevap budur .... TEŞEKKÜRLER!
katma yazar Isaac Urbina, kaynak

I used the menu item with the property app:actionViewClass="android.support.v7.widget.SearchView"

Belirlediğim faaliyette:

searchView = (SearchView) searchMenuItem.getActionView();
searchView.setIconifiedByDefault(false);

Yaptığım simgeyi kaldırmak için:

ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
searchIcon.setImageDrawable(null);
1
katma
Teşekkürler, @Roni Castro, Bu benim için çalışıyor.
katma yazar Parth Patel, kaynak

Aşağıda kod satırlarını kullanabilirsiniz:

int searchMagIcon = getResources().getIdentifier("search_mag_icon", "id", "android");
ImageView SearchHintIcon = (ImageView) searchView.findViewById(searchMagIcon);

Bu ImageView'u kaydedecek ve sonra değiştirebilirsiniz.

1
katma
Burada aynı, çalışmıyor. Boş gösterici istisnası oluşturur
katma yazar Parth Patel, kaynak
çalışmıyor, bir NPE olsun
katma yazar Dennis Anderson, kaynak

remove, xml'de bahsettiğiniz doğru çizimdir:

final Drawable remove = ContextCompat.getDrawable(getActivity(), R.drawable.ic_close_circle);
        etSearchProducts.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                if (etSearchProducts.getCompoundDrawables()[2] == null) {
                    return false;
                }
                if (event.getAction() != MotionEvent.ACTION_UP) {
                    return false;
                }
                if (event.getX() > etSearchProducts.getWidth() - etSearchProducts.getPaddingRight() - remove.getIntrinsicWidth()) {
                    etSearchProducts.setText("");
                    Utility.hideKeyboard(getActivity());
                }

                return false;
            }
        });
0
katma

En basit yol

  1. In case you are using AppCompat use

        app:iconifiedByDefault="false"
        app:searchIcon="@null"
    
  2. Else use android in place of app in above code as

    android:iconifiedByDefault="false"
    android:searchIcon="@null"
    
0
katma

no a good idea use private method as SearchView.class.getDeclaredField("mSearchHintIcon");


ve xx_layout'ta:

<?xml version="1.0" encoding="utf-8"?>

0
katma