带有下划线appcompat的Android微调器

我为我的应用程序使用了一个appcompat主题。 需要知道我如何显示下划线微调。 这只是显示锚点。 我尝试使用android:background设置下划线,但是会使锚点消失。

Solutions Collecting From Web of "带有下划线appcompat的Android微调器"

更新您的支持库和XML使用

请添加此样式到您的微调

style="@style/Base.Widget.AppCompat.Spinner.Underlined" 

这是hacky(而不是完美)的方式来改变微调和下划线在appcompat主题的颜色。 主要是我定制了Android支持库图片和xml文件来改变颜色。

1)去支持库包,并复制2个图像(或从这篇文章的底部下载我的习惯)

 /your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_spinner_mtrl_am_alpha.9.png 

 /your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_textfield_default_mtrl_alpha.9.png 

2)制作这些图像的副本

3)更改abc_spinner_mtrl_am_alpha.9.png的颜色(警告:保留黑色边框,为9补丁)

4)改变abc_textfield_default_mtrl_alpha.9.png第二行底部的颜色(你可以在下面附上的小图中看到)

5)保存并移动文件到您的项目可绘制

6)创buildbottom_line_color.xml可绘制:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="-6dp" android:left="-6dp" android:right="-6dp"> <shape> <stroke android:color="@color/brown" android:width="6dp"/> </shape> </item> 

7)创buildspinner_bottom_line.xml

 <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="@dimen/abc_control_inset_material" android:insetTop="@dimen/abc_control_inset_material" android:insetBottom="@dimen/abc_control_inset_material" android:insetRight="@dimen/abc_control_inset_material"> <selector> <item android:state_checked="false" android:state_pressed="false"> <layer-list> <item android:drawable="@drawable/my_custom_abc_textfield_default_mtrl_alpha" /> <item android:drawable="@drawable/my_custom_abc_spinner_mtrl_am_alpha" /> </layer-list> </item> <item> <layer-list> <item android:drawable="@drawable/my_custom_abc_textfield_default_mtrl_alpha" /> <item android:drawable="@drawable/my_custom_abc_spinner_mtrl_am_alpha" /> </layer-list> </item> </selector> </inset> 

PS我无法实现与默认微调相同的视觉风格(视觉变化如下所示)。 如果你开始使用这个自定义的微调主题,你应该在所有的项目中使用它。

所以添加到values / styles.xml

 <style name="My.Spinner.Style" parent="Base.Widget.AppCompat.Spinner.Underlined"> <item name="android:background">@drawable/spinner_bottom_line</item> </style> 

并在这样的应用中使用它:

  <Spinner android:id="@+id/account_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/My.Spinner.Style" /> 

重要提示:您应该调整微调器,并放置到各种可绘制文件夹。 你可以find与上面显示的path相同的大小。 有几个stream行的大小:

 drawables-mdpi 20x26 drawables-hdpi 29x38 drawables-xhdpi 38x50 drawables-xxhdpi 74x98 

您可以从这里获取我的自定义图像:

my_custom_abc_spinner_mtrl_am_alpha:

my_custom_abc_spinner_mtrl_am_alpha

my_custom_abc_textfield_default_mtrl_alpha:

my_custom_abc_textfield_default_mtrl_alpha

微调器的例子是(xxhdpi),行是mdpi(因为我们不需要各种可绘制文件夹中的各种行,所以我们只能有1个)。

视觉差异(从android studio xml预览窗口)显示在这里:

在这里输入图像说明

第一行是我的自定义下划线微调,第二行是默认的Base.Widget.AppCompat.Spinner.Underlined

在styles.xml中

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:spinnerStyle">@style/holoSpinner</item> </style> <style name="holoSpinner" parent="Widget.AppCompat.Spinner.Underlined"> <item name="android:textSize">16sp</item> <item name="android:textColor">@color/colorPrimary</item> </style> 

========================

在布局

  <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <Spinner android:id="@+id/spinCountry" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/edit_text_bottom_border" android:paddingBottom="10dp" /> </android.support.design.widget.TextInputLayout> 

===============================================

Drawable中的edit_text_bottom_border.xml文件

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:bottom="1dp" android:left="-3dp" android:right="-3dp" android:top="-3dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#535353" /> <!--android:color="#535353" />--> </shape> </item> </layer-list>