Обработка щелчка на значке SearchView - PullRequest
0 голосов
/ 16 сентября 2018

Сначала я объясню вам, что я хочу сделать. Затем я покажу вам, что я уже сделал. Наконец, я попрошу вас о том, что я буду реализовывать.

Моя цель

Моя цель - иметь Toolbar, как в Playstore: enter image description here

Когда вы щелкаете по меню бургера, оно отображает меню. Когда вы нажимаете на вход, он отображает изменения значка и клавиатуры:

enter image description here

Что у меня есть сейчас

enter image description here

Я следовал документации (https://developer.android.com/training/appbar/ + https://developer.android.com/guide/topics/search/search-dialog + https://developer.android.com/training/search/setup). Таким образом, у меня есть:

  1. res/menu/action_bar_menu.xml содержащий мой SearchView виджет
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/searchView"
        android:title="@string/search_title"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />

</menu>
  1. A Toolbar в макете моего фрагмента:
    <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorRoyalRed"
    android:theme="@style/ToolbarStyle"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
  1. Стиль ToolbarStyle (см. Выше):
<style name="ToolbarStyle">
    <item name="android:background">@color/colorRoyalRed</item>
    <item name="android:textColorPrimary">@color/colorRichYellow</item>
    <item name="actionButtonStyle">@style/ToolbarActionButton</item>
</style>
<style name="ToolbarActionButton">
    <item name="android:padding">0dp</item>
    <item name="android:paddingStart">0dp</item>
    <item name="android:paddingEnd">0dp</item>
</style>
  1. В классе фрагмента я использую панель инструментов:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    Toolbar toolbar = view.findViewById(R.id.toolbar);
    toolbar.setTitle("");
    AppCompatActivity app_compat_activity = (AppCompatActivity) getActivity();
    Objects.requireNonNull(app_compat_activity).setSupportActionBar(toolbar);
    app_compat_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    return view;
}
  1. В классе фрагментов я использую SearchView:
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater menu_inflater) {
        menu_inflater.inflate(R.menu.action_bar_menu, menu);
        super.onCreateOptionsMenu(menu,menu_inflater);

        AppCompatActivity app_compat_activity = (AppCompatActivity) getActivity();


SearchView search_view = (SearchView) menu.findItem(R.id.searchView).getActionView();
        search_view.setIconifiedByDefault(false);
        SearchManager search_manager = (SearchManager) Objects.requireNonNull(app_compat_activity).getSystemService(Context.SEARCH_SERVICE);
        search_view.setSearchableInfo(Objects.requireNonNull(search_manager).getSearchableInfo(app_compat_activity.getComponentName()));
    }

Ну, есть и другие реализации (модификации, касающиеся манифеста и т. Д.), Но они не важны (обратите внимание на все необходимые изменения для реализации простой панели поиска на панели инструментов ... более 5 шагов ...).

Что бы я хотел сделать дальше (помогите, пожалуйста!)

Я не хочу использовать ничего, кроме структуры пунктов меню (таким образом, я не хочу фактически добавлять SearchView в макет фрагмента).

  1. Как я могу изменить значок SearchView? На данный момент это увеличительное стекло. Это должно быть меню бургера. Я попытался изменить res/menu/action_bar_menu.xml, указав android:icon= на SearchView, но это не сработало. Я также пытался использовать <item name="searchIcon">@drawable/ic_baseline_menu_24px</item> в стиле ToolbarActionButton, но это не сработало. Здесь цель состоит в том, чтобы заменить стакан на значок меню бургера.

  2. Как я могу обработать щелчок по значку меню бургера SearchView (как только он будет установлен)? Действительно, я вызову мою функцию DrawerLayout::openDrawer, чтобы открыть мое меню.

  3. Как я могу обработать щелчок по содержимому SearchView? Действительно, я заменю меню бургера на стрелку влево (и, если щелкнуть, клавиатура исчезнет и появится меню бургера).

Использую ли я не те вещи?

Я просто следовал документации Google. Но мне так сложно понять, что я могу быть на неверном пути? Должен ли я перестать использовать структуру пунктов меню?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете попробовать SearchEditTextLayout , доступный в рамках этого проекта Google - https://android.googlesource.com/platform/packages/apps/Dialer/

Эти библиотеки также могут помочь вам достичь желаемых результатов.

SearchView и FloatingSearchView

...