如何创build自定义的微调框,像微调框右边的三angular形边框?

我想开发自定义的微调,就像右下angular有三angular形的微调
像下面的图片

在这里输入图像说明

上图我写了我的自定义微调像一个
spinner.xml

<Spinner android:background="@drawable/spinner_background"/> 

spinner_background.xml

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

 <item android:state_pressed="true" android:drawable="@drawable/spinner_ab_pressed_new_theme_bs"> <shape> <solid android:color="@color/White" /> <corners android:radius="3dp" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> <stroke android:width="2dp" android:color="@color/skyblue" /> </shape> </item> <!-- spinner_ab_default_new_theme_bs -> this image for corner triangle --> <item android:drawable="@drawable/spinner_ab_default_new_theme_bs" > <shape> <solid android:color="@color/White"> </solid> <corners android:radius="3dp" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> <stroke android:width="2dp" android:color="@color/gray"/> </shape> </item> 

我得到如下图像的输出
在这里输入图像说明

我尝试了很多,但没有达到我的目标,请有人有解决scheme,像上面的第一个图像开发微调。

提前致谢

微调

 <Spinner android:id="@+id/To_Units" style="@style/spinner_style" /> 

style.xml

  <style name="spinner_style"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:background">@drawable/gradient_spinner</item> <item name="android:layout_margin">10dp</item> <item name="android:paddingLeft">8dp</item> <item name="android:paddingRight">20dp</item> <item name="android:paddingTop">5dp</item> <item name="android:paddingBottom">5dp</item> <item name="android:popupBackground">#DFFFFFFF</item> </style> 

gradient_spinner.xml (在可绘制文件夹中)

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item><layer-list> <item><shape> <gradient android:angle="90" android:endColor="#B3BBCC" android:startColor="#E8EBEF" android:type="linear" /> <stroke android:width="1dp" android:color="#000000" /> <corners android:radius="4dp" /> <padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" /> </shape></item> <item ><bitmap android:gravity="bottom|right" android:src="@drawable/spinner_arrow" /> </item> </layer-list></item> </selector> 

@drawable/spinner_arrow是你的右下angular的图像

您可以通过在XML中的微调器声明中使用单行来实现以下function: 在这里输入图像说明

只需添加: style="@android:style/Widget.Holo.Light.Spinner"

这是android中的默认生成样式。 它不包含它周围的边界。 为此,你最好在谷歌上search一些东西。

希望这可以帮助。

更新:经过大量的挖掘,我得到了一些适合在微调器周围引入边界的东西。

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:bottom="8dp" android:top="8dp"> <shape> <solid android:color="@android:color/white" /> <corners android:radius="4dp" /> <stroke android:width="2dp" android:color="#9E9E9E" /> <padding android:bottom="16dp" android:left="8dp" android:right="16dp" android:top="16dp" /> </shape> </item> </layer-list> 

将其放置在可绘制文件夹中,并将其用作微调框的背景。 喜欢这个:

 <RelativeLayout android:id="@+id/speaker_relative_layout" android:layout_width="0dp" android:layout_height="70dp" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:layout_marginTop="16dp" android:background="@drawable/spinner_style" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> <Spinner android:id="@+id/select_speaker_spinner" style="@style/Widget.AppCompat.DropDownItem.Spinner" android:layout_width="match_parent" android:layout_height="70dp" android:entries="@array/select_speaker_spinner_array" android:spinnerMode="dialog" /> </RelativeLayout> 

有两种方法来实现这一点。

1-已经build议你可以设置你的微调的背景作为自定义9补丁图像所做的所有调整。

 android:background="@drawable/btn_dropdown" android:clickable="true" android:dropDownVerticalOffset="-10dip" android:dropDownHorizontalOffset="0dip" android:gravity="center" 

如果你想让你的微调显示各种不同的背景颜色,我会build议让下拉的图像透明,并加载与你的颜色设置相对布局的微调。

btn _dropdown是:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/spinner_default" /> <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/spinner_default" /> <item android:state_pressed="true" android:drawable="@drawable/spinner_pressed" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/spinner_pressed" /> <item android:state_enabled="true" android:drawable="@drawable/spinner_default" /> <item android:state_focused="true" android:drawable="@drawable/spinner_pressed" /> <item android:drawable="@drawable/spinner_default" /> </selector> 

png的各个州将在这里定义你的不同的纺纱者的地位

你可以devise一个简单的九块 PNG图像,并将其用作微调的背景。 使用GIMP你可以把图像中的边界和直angular三angular形。

要改变只有“背景”(添加angular落,改变颜色,….)你可以把它放到FrameLayout与想要的背景可绘制,否则你需要做九个补丁背景,以不丢失微调箭头。 微调框背景是透明的。