我想开发自定义微调器,如旋转器周围的线,右下角为三角形 喜欢以下图片
对于上面的图,我写了我的自定义微调器,如一个
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>
我的输出如下图所示
我尝试了很多,但没有实现我的目标,任何人都有解决方案来开发微调器 喜欢上面的第一张图片。
先谢谢
答案 0 :(得分:113)
Spinner
<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
是您的右下角图片
答案 1 :(得分:20)
这很简单。
your_layout.xml
<android.support.v7.widget.AppCompatSpinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/spinner_background"
/>
在drawable文件夹中,spinner_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item><layer-list>
<item>
<shape>
<solid
android:color="@color/colorWhite">
</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/colorDarkGrey"/>
</shape>
</item>
<item >
<bitmap android:gravity="bottom|right"
android:src="@drawable/ic_arrow_drop_down_black_24dp" />
</item>
</layer-list></item>
</selector>
预览:
答案 2 :(得分:6)
只需添加:style="@android:style/Widget.Holo.Light.Spinner"
这是android中默认生成的样式。但它不包含它周围的边框。为此,你最好在谷歌搜索一些东西。
希望这有帮助。
<强>更新强> 经过大量挖掘后,我得到了一些适合在微调器周围引入边框的东西。
<?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>
将其放在drawable文件夹中,并将其用作微调器的背景。像这样:
<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>
答案 3 :(得分:1)
有两种方法可以实现这一目标。
1-如前所述,您可以将微调器的背景设置为自定义9补丁图像,并对其进行所有调整。
android:background="@drawable/btn_dropdown"
android:clickable="true"
android:dropDownVerticalOffset="-10dip"
android:dropDownHorizontalOffset="0dip"
android:gravity="center"
如果您希望您的微调器显示各种不同的背景颜色,我建议将下拉图像透明,&amp;将该微调器加载到颜色设置为的相对布局中。
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的各种状态将定义你的各种旋转器seleti状态
答案 4 :(得分:0)
您可以设计一个简单的nine-patch png图像并将其用作微调器的背景。使用GIMP,您可以在图像中放置边框和右三角形。
答案 5 :(得分:0)
仅更改&#34;背景&#34; (添加角落,改变颜色,....)你可以把它放入FrameLayout与想要的背景drawable,否则你需要制作九个补丁背景,以免丢失微调箭头。微调背景是透明的。
答案 6 :(得分:0)
这非常容易,您只需将其添加到适配器-> getDropDownView
getDropDownView:
convertView.setBackground(getContext().getResources().getDrawable(R.drawable.bg_spinner_dropdown));
bg_spinner_dropdown:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" />
<corners
android:bottomLeftRadius=enter code here"25dp"
android:bottomRightRadius="25dp"
android:topLeftRadius="25dp"
android:topRightRadius="25dp" />
</shape>
答案 7 :(得分:0)
如果您不想创建多个 XML 文件,请尝试:
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:strokeWidth="1dp"
app:strokeColor="@color/black"
app:cardCornerRadius="4dp">
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"/>
</com.google.android.material.card.MaterialCardView>
要更改边框颜色:
app:strokeColor="YOUR_COLOR_HERE"
要更改边框的宽度:
app:strokeWidth="YOUR_DP_WIDTH_HERE"