Подтвердить что ты не робот

Удалите SearchIcon в качестве подсказки в searchView

Я делаю приложение, например, когда я нажимаю на изображение (это searchView)

enter image description here

откроется панель поиска!

и похоже enter image description here

но здесь отображается значок поиска по умолчанию (лупа), но это исчезает, как только вводится какой-либо текст

enter image description here

но я не хочу, чтобы эта лупа отображалась даже при первом щелчке изображения.

и здесь я не использую какой-либо файл xml

мой код

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);
        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...");
        }
    }
}
4b9b3361

Ответ 1

У меня тоже были проблемы с этим. Я объединил найденный учебник и существующий ответ, найденный здесь в 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));

Обратите внимание, что searchView - это LinearLayout, поэтому используйте LinearLayout.LayoutParams, чтобы избежать исключения.

Я также пробовал это, но он не удаляет представление. Я не могу понять, почему.:

magImage.setVisibility(View.GONE);

Для других представлений, которые вам нужно изменить, откройте к этому руководству.

Ответ 2

В моем приложении я использовал android.support.v7.widget.SearchView и чтобы скрыть значок поиска, это сработало для меня:

<android.support.v7.widget.SearchView
                ...
                app:iconifiedByDefault="false"
                app:searchIcon="@null"
                />

Ответ 3

Я просто добавил атрибут @null в searchHintIcon:

<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
    <item name="searchHintIcon">@null</item>
</style>

и применил этот стиль в моей теме приложения

<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="searchViewStyle">@style/SearchViewMy</item>
</style>

Работает для меня.

Ответ 4

Попробуйте эти три строки:

android:iconifiedByDefault="false"
android:searchIcon="@null"
android:searchHintIcon="@null"

* Он работает только для android.widget.SearchView

Ответ 5

TL; DR: просто установить подсказку EditText на пустую строку достаточно, чтобы удалить значок подсказки.

Я нашел ответ, который действительно работает. Там много материала об изменении значка с использованием отражения - например, обсуждалось в Styling ActionBar SearchView. Этот сайт - отличный ресурс, но, к сожалению, подсказка поиска ImageView не изменяется (хотя отражение не вызывает ошибок). Единственный способ удалить это изображение:

try {
    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
    searchPlate.setHint("");
}
catch (Throwable t)
{
    t.printStackTrace();
}

Вы должны поместить это в свой метод onCreateOptionsMenu и получить ссылку на свой XML -declared SearchView, используя что-то вроде:

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

Ответ 6

Я только что встретил ту же проблему, вот некоторые ссылки ссылки.

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

Ключ находится в следующей функции, он устанавливает значок как 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;
}

Ответ 7

Используйте атрибут "searchHintIcon" в ваших стилях для этого:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="searchViewStyle">@style/AppTheme.SearchView</item>
</style>

<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView">
    <item name="searchHintIcon">@null</item>
</style>

Вы можете заменить @null на любые доступные выходы

Ответ 8

вы можете попробовать следующее:

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