マテリアルデザインには、次のような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()
}
だから、私はこれを実装することが可能であるかどうかを知りたいですが、スピナーで
これは、スピナーを使用した私の試みでしたが、スタイルが正しく表示されず、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>
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>