Можно ли реализовать раскрытые раскрывающиеся меню с помощью счетчика - PullRequest
0 голосов
/ 17 июня 2019

В дизайне материала есть раскрывающееся раскрывающееся меню, реализованное с помощью AutoCompleteTextView, например:

<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_text">

  <AutoCompleteTextView
      android:id="@+id/filled_exposed_dropdown"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</com.google.android.material.textfield.TextInputLayout>

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

Я отключил редактирование в AutoCompleteTextView, чтобы избежать использования автозаполнения, но после выбора одного из элементов, затем автозаполнение просто перечисляет элементы, которые соответствуют тексту элемента, выбранному с учетом фильтра, который используется в этом представлении. Это код:

        <AutoCompleteTextView
                android:id="@+id/filled_exposed_dropdown"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="16dp"
                **android:editable="false"**/>

Также я ставлю слушателя, чтобы открыть список элементов при нажатии на него

        val editTextFilledExposedDropdown = findViewById<AutoCompleteTextView>(R.id.filled_exposed_dropdown)
        editTextFilledExposedDropdown.setAdapter(adapter)
        editTextFilledExposedDropdown.setOnClickListener {
            (it as AutoCompleteTextView).showDropDown()
        }

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

enter image description here

Это была моя попытка использовать спиннер, но он не правильно отображал стиль OutlinedBox.Dense.ExposedDropdownMenu, а также отображал значок со стрелкой внизу, я думаю, один для стиля, а другой для счетчика.

это был код со счетчиком:

<com.google.android.material.textfield.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Hint">
    <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</com.google.android.material.textfield.TextInputLayout>


<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/layout_id"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Currency">
    <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/my_spinner"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</com.google.android.material.textfield.TextInputLayout>

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Это то, что я искал, просто отключите функцию автозаполнения AutoCompleteTextView, переопределив метод getFilter. ответ опубликован здесь ( AutoCompleteTextView - отключить фильтрацию )

0 голосов
/ 17 июня 2019

Как насчет создания PopupMenu вместо AutoCompleteTextView Вот пример того, как создается меню в Android:

    Context wrapper = new ContextThemeWrapper(getContext(), R.style.popupMenuStyle);
//yourView is the view that you want to display the menu above it.
                PopupMenu popupMenu = new PopupMenu(wrapper, yourView);
                popupMenu.getMenuInflater().inflate(R.menu.menu, popupMenu.getMenu());
                popupMenu.setOnMenuItemClickListener(item -> {
                    switch (item.getItemId()) {
                        case R.id.delete:
                            //delete
                            break;
                        case R.id.edit:
                            //edit
                            break;
                    }
                    popupMenu.dismiss();
                    return true;
                });
                popupMenu.show();

menu.xml файл внутри меню папка:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/edit"
        android:title="@string/edit">

    </item>
    <item
        android:id="@+id/delete"
        android:title="@string/delete">
    </item>
</menu>
...