如何为Spinner DropDown设置圆角?

7
我需要定制旋转下拉框。它应该带有圆角。 现在它看起来像这样:

关闭

打开

这个 解决方案 不起作用。

布局:

    <androidx.appcompat.widget.AppCompatSpinner
    android:id="@+id/messageSubject"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textAppearance="@style/Text.Default.Normal"
    android:background="@color/transparent"
    android:minHeight="@dimen/grid_6_25"
    android:layout_marginTop="@dimen/grid_1_75"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/supportQuestion" />

片段:

class SupportFragment : Fragment(R.layout.fragment_support) {

private val viewBinding by viewBinding<FragmentSupportBinding>()

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    initView()
}

private fun initView() {
    val adapter = ArrayAdapter.createFromResource(
        requireContext(),
        R.array.message_subject,
        R.layout.spinner_selected
    ).also { adapter ->
        adapter.setDropDownViewResource(R.layout.spinner_dropdown)
    }

    viewBinding.messageSubject.adapter = NothingSelectedSpinnerAdapter(requireContext(), adapter, R.layout.spinner_hint)
}

companion object {
    fun newInstance() = SupportFragment()
}

}

3个回答

9
  1. Create a Round Background spinnerbg.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#3B3B3B" />
    <corners android:radius="@dimen/_4sdp" />
    </shape>
    
  2. Add it to Styles.

    <style name="SpinnerTheme" parent="android:Widget.Material.Spinner.Underlined">
     <item name="android:background">@drawable/spinnerbg
     </item>
     <item name="android:popupBackground">@drawable/spinnerbg
     </item>
    
     <item name="android:textAlignment">textStart</item>
    </style>
    
  3. Use the style

    <androidx.appcompat.widget.AppCompatSpinner
    android:id="@+id/spinner_season"
    style="@style/SpinnerTheme"
    android:layout_width="@dimen/_100sdp"
    android:layout_height="@dimen/_30sdp"
    android:layout_alignParentEnd="true"
    android:layout_gravity="end"
    android:layout_marginEnd="@dimen/_10sdp"
    android:spinnerMode="dropdown" />
    

如果需要,可以在Java文件中添加自定义布局。

    ArrayAdapter aa = new ArrayAdapter(context, R.layout.item_spinner, R.id.textview, season1);
    aa.setDropDownViewResource(R.layout.item_spinner_dropdown);

无更改 链接 - Novikov
请在您的代码中删除以下内容: android:background="@color/transparent" - Rohaitas Tanoli
我已经给你一个可以工作的代码,请正确地实现它。 - Rohaitas Tanoli

0
创建一个名为background.xml的文件,并将其设置为下拉列表的背景。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners
        android:radius="30dp"/>

    <solid
        android:color="@color/colorWhite"/>

    <stroke
        android:color="@color/colorGray"
        android:width="2dp"/>

</shape>

你可以根据自己的需求选择@color/colorWhite和@color/colorGray。

然后将其设置为:

<androidx.appcompat.widget.AppCompatSpinner
    android:id="@+id/messageSubject"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textAppearance="@style/Text.Default.Normal"
    android:background="@drawable/background"
    android:minHeight="@dimen/grid_6_25"
    android:layout_marginTop="@dimen/grid_1_75"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/supportQuestion" />

我需要将这个做成圆角。 - Novikov
然后,只需将android:background="@drawable/background"添加到您想要变成圆形的指定布局即可。 - Hascher
我需要给弹出窗口添加角落。如何找到弹出窗口的布局?setPopUpBackground 对我不起作用。 - Novikov
你把 <androidx.appcompat.widget.AppCompatSpinner 放在哪个布局文件里了? - Hascher
当我这样做时 - 仅为关闭的微调器屏幕更改背景,对于打开的微调器没有任何变化截图 - Novikov
将android:background="@drawable/background"设置为布局的根视图,它就会起作用。 - Hascher

0
只需使用 androidx.appcompat.widget.AppCompatSpinner 而不是 Spinner,并设置圆角背景。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接