带有下划线appcompat的Android微调器

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

  • 是否存在与Widget.Material.Spinner.Underlined相当的AppCompat?
  • Android微调 - onItemSelected / setOnItemSelectedListener不触发
  • 更改Spinner DropDown宽度
  • 你怎么能使用像Glide,毕加索等图像加载器的animation微调加载占位符?
  • 以编程方式创建一个微调器
  • 如何禁用Spinner的“禁用”状态?
  • 从微调器下拉列表中删除边距
  • 将微调器值alignment而不是左alignment
  • 更新您的支持库和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>