web-dev-qa-db-ja.com

スピナーを使用して露出ドロップダウンメニューを実装することは可能ですか

マテリアルデザインには、次のような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での編集を無効にしてオートコンプリートの使用を回避しましたが、アイテムの1つを選択した後、このビューで使用されているフィルターを指定すると、オートコンプリートは選択されたアイテムテキストに一致するアイテムのみをリストします。これはコードです:

        <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も表示されません。また、2つの下矢印アイコンが表示されます。1つはスタイル用、もう1つはスピナー用と思います。

これはスピナーを備えたコードでした:

<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>
3
Jimmy Alvarez

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>
0