Значок SearchView отображается дважды - PullRequest
0 голосов
/ 21 октября 2018

Я реализовал SearchView на своей панели инструментов, следуя официальным инструкциям Android.

SearchView сам по себе работает хорошо, но когда я касаюсь значка поиска, он смещается влево вместо отображения кнопки «Подсказка поиска» и «Закрыть», хотя, если я нажимаю этот значок «второго поиска», в итоге я получаюТипичный вид поиска.

Вот мой xml панели инструментов:

<item android:id="@+id/search"
        android:title="@string/search_view"
    app:showAsAction="collapseActionView|ifRoom"
    android:iconTint="@android:color/white"
        android:icon="@drawable/ic_search_white_24dp"
    app:actionViewClass="android.widget.SearchView" />

И мой onCreateOptionsMenu

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);

        // Associate searchable configuration with the SearchView
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();

        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        return true;
    }

И мой manifest.xml

<activity
            android:name=".Activities.MainActivity"
            android:label="@string/addWordLabel_Act"
            android:launchMode="singleTop"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH"/>
            </intent-filter>
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

Наконец, у вас есть несколько скриншотов проблемы: SearchView до нажатия

SearchView после первого нажатия, вот проблема

SearchView после второго нажатия, «обычный SearchView»

И это все.

Примечание: я еще не реализовал Activity / Fragment для обработки поиска.

1 Ответ

0 голосов
/ 21 октября 2018

Наконец-то я получил решение.Это было легко, но я потратил два дня, пытаясь понять это.

Просто, для проблем совместимости, используйте

app:actionViewClass="android.support.v7.widget.SearchView"

вместо app:actionViewClass="android.widget.SearchView"

и, конечно, изменить

SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
       SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();

на

SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        android.support.v7.widget.SearchView searchView =
                (android.support.v7.widget.SearchView) menu.findItem(R.id.search).getActionView();
...