Remove the SearchIcon as hint in the searchView

后端 未结 13 2182
攒了一身酷
攒了一身酷 2020-12-03 09:59

I am doing an application where for example when i click on the image(it is a searchView)

\"enter

相关标签:
13条回答
  • 2020-12-03 10:23

    with v7 Widget , if you use searchView.setIconifiedByDefault(false) the beahvior of the search view differs . You only set hint icon to @null in xml. Also you can apply this manner for other icons.

    0 讨论(0)
  • 2020-12-03 10:25

    For androidx you can do like this

    ImageView magImage = (ImageView) searchView.findViewById(androidx.appcompat.R.id.search_mag_icon);
    magImage.setVisibility(View.GONE);
    magImage.setImageDrawable(null);
    

    It's work for me

    0 讨论(0)
  • 2020-12-03 10:26

    I've had trouble with this too. I combined the tutorial I found and an existing answer found here in stackoverflow.

    int magId = getResources().getIdentifier("android:id/search_mag_icon", null, null);
    ImageView magImage = (ImageView) searchView.findViewById(magId);
    magImage.setLayoutParams(new LinearLayout.LayoutParams(0, 0));
    

    Take note that searchView is a LinearLayout, so use LinearLayout.LayoutParams to avoid an exception.

    I also tried this but it doesn't remove the view. I can't seem to figure why.:

    magImage.setVisibility(View.GONE);
    

    For the other views that you need to change, refer to this tutorial.

    0 讨论(0)
  • 2020-12-03 10:26

    In my app i've used android.support.v7.widget.SearchView and to hide search icon this worked for me :

    <android.support.v7.widget.SearchView
        ...
        app:iconifiedByDefault="false"
        app:searchIcon="@null"
    />
    
    0 讨论(0)
  • 2020-12-03 10:28

    you can try this :

      public class MainActivity extends Activity {
    
            @SuppressLint("NewApi")
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
    
                RelativeLayout relative = new RelativeLayout(this);
                LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
                relative.setLayoutParams(params);
                setContentView(relative);
    
                SearchView searchView = new SearchView(this);
    searchView.setIconifiedByDefault(false);
                traverseView(searchView, 0);
        //      searchView.setIconifiedByDefault(false);
                LayoutParams searchViewparams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        //      searchViewparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                searchView.setLayoutParams(searchViewparams);
                relative.addView(searchView);
            }
            @TargetApi(Build.VERSION_CODES.HONEYCOMB)
            @SuppressLint("NewApi")
            private void traverseView(View view, int index) {
                if (view instanceof SearchView) {
                    SearchView v = (SearchView) view;
                    for(int i = 0; i < v.getChildCount(); i++) {
                        traverseView(v.getChildAt(i), i);
                    }
                } else if (view instanceof LinearLayout) {
                    LinearLayout ll = (LinearLayout) view;
                    for(int i = 0; i < ll.getChildCount(); i++) {
                        traverseView(ll.getChildAt(i), i);
                    }
                } else if (view instanceof EditText) {
                    ((EditText) view).setTextColor(Color.GREEN);
                    ((EditText) view).setHintTextColor(Color.BLACK); 
                } else if (view instanceof TextView) {
                    ((TextView) view).setTextColor(Color.BLUE);
                } else if (view instanceof ImageView) {
                    ((ImageView) view).setImageResource(R.drawable.ic_launcher);
                } else {
                    Log.v("View Scout", "Undefined view type here...");
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-03 10:29

    I just met the same problem, here are some reference links.

    http://blog.luxteam.net/2013/11/04/styling-appcompat-searchview/

    https://android.googlesource.com/platform/frameworks/support.git/+/android-support-lib-19.1.0/v7/appcompat/src/android/support/v7/widget/SearchView.java

    The key is in the following function, it sets the icon as an ImageSpan.

    private CharSequence getDecoratedHint(CharSequence hintText) {
        // If the field is always expanded, then don't add the search icon to the hint
        if (!mIconifiedByDefault) return hintText;
    
        SpannableStringBuilder ssb = new SpannableStringBuilder("   "); // for the icon
        ssb.append(hintText);
        Drawable searchIcon = getContext().getResources().getDrawable(getSearchIconId());
        int textSize = (int) (mQueryTextView.getTextSize() * 1.25);
        searchIcon.setBounds(0, 0, textSize, textSize);
        ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return ssb;
    }
    
    0 讨论(0)
提交回复
热议问题