Android Проблема с макетом раскрывающегося списка материального дизайна при добавлении списка массивов - PullRequest
1 голос
/ 14 июля 2020

Я столкнулся с некоторыми проблемами с элементами раскрывающегося меню android Material Design. Ниже приведены мои проблемы с кодом и изображениями. Я реализовал элементы раскрывающегося меню материального дизайна, и раньше макет был абсолютно прекрасен. но после добавления списка массивов моя ширина макета автоматически увеличивается. ниже мой код:

XML:

<com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/text_input_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:hint="Product Category"
                    app:endIconMode="dropdown_menu"
                    app:hintTextColor="@color/colorPrimary">

                    <AutoCompleteTextView
                        android:id="@+id/productCategoryDropdown"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:textCursorDrawable="@null"
                        android:paddingStart="10dp" />

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


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:weightSum="2">

                    <com.google.android.material.textfield.TextInputLayout
                        android:layout_width="wrap_content"
                        android:layout_height="65dp"
                        android:layout_marginStart="5dp"
                        android:layout_marginTop="7dp"
                        android:layout_marginEnd="5dp"
                        android:layout_weight="1.115"
                        android:hint="Product Weight"
                        app:hintTextColor="@color/colorPrimary">

                        <com.google.android.material.textfield.TextInputEditText
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:inputType="number"
                            android:textCursorDrawable="@null" />
                    </com.google.android.material.textfield.TextInputLayout>

                    <com.google.android.material.textfield.TextInputLayout
                        android:layout_width="wrap_content"
                        android:layout_height="65dp"
                        android:layout_marginStart="5dp"
                        android:layout_marginEnd="5dp"
                        android:layout_weight="0.9"
                        android:hint="Weight Unit"
                        app:endIconMode="dropdown_menu"
                        app:hintTextColor="@color/colorPrimary">

                        <AutoCompleteTextView
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:id="@+id/productWeightUnitDropdown"
                            android:paddingStart="5dp"
                            android:textCursorDrawable="@null"/>

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

                </LinearLayout>

Мой макет после XML:

enter image description here

Java code for same:

Dropdown = view.findViewById(R.id.productWeightUnitDropdown);

        String[] weightUnit = new String[] {
                "kg (Kilogram)",
                "pcs (Piece)"
        };

        ArrayAdapter weightUnitAdapter = new ArrayAdapter<>(
                getActivity(),
                R.layout.dropdown_item,
                weightUnit
        );

        weightUnitDropdown.setAdapter(weightUnitAdapter);

Drop-Down Item.XML

  

После добавления кода java ширина раскрывающегося списка единиц веса автоматически увеличивается. и теперь мой макет выглядит так. Не понимаю, почему нарушается выравнивание.:

введите описание изображения здесь

Также, пожалуйста, помогите, почему в макете товарной категории выбранный мной товар появляется поверх подсказки. почему он не использует одинаковые интервалы, такие как edit-text. То же самое и с компоновкой весовых единиц. Сравните текст веса продукта и текст единицы веса, не в одном выравнивании. Кроме того, моя клавиатура открывается, когда я нажимаю на это раскрывающееся меню. Мне не нужна здесь клавиатура.

1 Ответ

4 голосов
/ 14 июля 2020

Была та же проблема, и, как объясняется в документации , вам лучше использовать стиль в TextInputLayout для достижения правильных эффектов и поведения для ExposedDropdownMenus следующим образом:

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"

А также для TextInputLayout с TextInputEditText:

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

Результат:

enter image description here

Code:

<?xml version="1.0" encoding="utf-8"?>
   

PS: Нет необходимости упоминать, что у него есть некоторые проблемы с поведением AutoCompleteTextView, например, когда вы нажимаете на виджет, он показывает меню DropDown (и он не должен получать никаких значений и т.п.), которые могут можно решить с помощью трюка с использованием onFocusChangeListener, чтобы определить, когда пользователь нажал на виджет и получил фокус, скрыть клавиатуру и сделать так, чтобы она отображала только список:

(state_layout.editText as AutoCompleteTextView).inputType = EditorInfo.TYPE_NULL
        state_layout.onFocusChangeListener = View.OnFocusChangeListener { _: View?, hasFocus ->
            if (hasFocus) {
                hideKeyboard(this)
            }
        }
...