SearchView: почему бы не показать значок стекла - PullRequest
0 голосов
/ 18 декабря 2018

Android studio 3.2.1

в моем приложении / build.gradle:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.myproject"
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 1
        versionName "1.1.1"

здесь мой виджет:

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SearchView;

private MenuItem searchMenuItem;

    searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
                @Override
                public boolean onMenuItemActionExpand(MenuItem menuItem) {
                    if (BuildConfig.DEBUG)
                        Log.d(TAG, "onMenuItemActionExpand(), press_magnifying_glass");
                    isSearchWidgetExpanded = true;
                    mToolbar.setBackgroundColor(ContextCompat.getColor(activity, R.color.search_view_background));
                    // Expand (click to magnifying glass) and give focus to
                    // SearchView automatically
                    searchView.setFocusable(true);
                    searchView.setIconified(false);
                    searchView.requestFocusFromTouch();
                    searchView.setIconifiedByDefault(false);

                    menu.setGroupVisible(R.id.main_menu_group, false);
                    return true;
                }

                @Override
                public boolean onMenuItemActionCollapse(MenuItem menuItem) {
                    if (BuildConfig.DEBUG)
                        Log.d(TAG, "onMenuItemActionCollapse(), press_home_searchView");
                    isSearchWidgetExpanded = false;
                    mToolbar.setBackgroundColor(activity.getResources().getColor(R.color.factura_background_color));
                    searchView.setQuery("", false);
                    menu.setGroupVisible(R.id.main_menu_group, true);
                    AndroidUtil.hideKeyboard((Activity) activity);
                    return true;
                }
            });

Здесь меню xml:

  <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="md.factura.app.cart.CartActivity">

    <group android:id="@+id/main_menu_group">
        <item
            android:id="@+id/action_search"
            android:icon="@drawable/ic_action_search"
            android:title="@string/search"
            app:actionViewClass="android.widget.SearchView"
            app:showAsAction="ifRoom|collapseActionView" />
        <item
            android:id="@+id/changeLanguage"
            android:title="@string/change_language"
            app:showAsAction="never" />
        <item
            android:id="@+id/report_or_review"
            android:title="@string/report_issue"
            app:showAsAction="never" />
        <item
            android:id="@+id/about"
            android:title="@string/about"
            app:showAsAction="never" />
        <item
            android:id="@+id/debug"
            android:title="@string/debug_config"
            android:visible="false"
            app:showAsAction="never" />
    </group>

</menu>

И вот результат:

  1. Перед нажатием на значок стекла:

enter image description here

После нажатия на значок стекла:

enter image description here

После нажатия кнопки возврата: enter image description here

Как вы можете видеть после шага № 3, значок не отображается снова.Почему?

1 Ответ

0 голосов
/ 18 декабря 2018

На основании ЭТОГО в вашем пункте меню попробуйте заменить:

app:showAsAction="ifRoom|collapseActionView"

на:

app:showAsAction="always|collapseActionView
...