带有下划线appcompat的Android微调器

Pri*_*dam 45 android underline spinner android-appcompat

我正在为我的应用程序使用appcompat主题.需要知道我如何显示下划线到微调器.它只是显示锚.我尝试使用android:background设置下划线但它会使锚点消失.

Pri*_*dam 126

更新您的支持库和XML使用

请将此样式添加到您的Spinner中

    style="@style/Base.Widget.AppCompat.Spinner.Underlined"
Run Code Online (Sandbox Code Playgroud)

  • 如何为下划线着色? (10认同)
  • 有没有办法删除下拉箭头并加下划线?如果我设置任何背景,下划线就会消失. (2认同)
  • android:backgroundTint =“ @ color / your_color”` (2认同)

Rag*_*sis 7

这是在appcompat主题中更改微调器和下划线颜色的hacky(而不是完美)方法.主要是我定制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
Run Code Online (Sandbox Code Playgroud)

/your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_textfield_default_mtrl_alpha.9.png
Run Code Online (Sandbox Code Playgroud)

2)制作这些图像的副本

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

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

5)保存文件并将其移动到项目可绘制文件中

6)创建bottom_line_color.xml drawable:

<?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>
Run Code Online (Sandbox Code Playgroud)

7)创建spinner_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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

      <Spinner
            android:id="@+id/account_spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/My.Spinner.Style"
            />
Run Code Online (Sandbox Code Playgroud)

重要说明:您应该调整微调器的大小并放置到各种drawables文件夹.您可以在我上面显示的相同路径中找到尺寸.流行的尺寸很少:

drawables-mdpi   20x26

drawables-hdpi   29x38

drawables-xhdpi  38x50

drawables-xxhdpi 74x98
Run Code Online (Sandbox Code Playgroud)

您可以从此处获取我的自定义图像:

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

Spinner的例子是(xxhdpi),line是mdpi(因为我们在各种drawable文件夹中不需要各种行,所以我们只能有1行).

视觉差异(来自android studio xml预览窗口)如下所示:

在此输入图像描述

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

  • 我没有找到改变微调器下划线颜色的方法.如果我在styles.xml中更改了背景,则旋转器项目消失.所以这个解决方案可以帮助我改变底线颜色并留下微调项目 (2认同)

小智 7

应用style="@style/Base.Widget.AppCompat.Spinner.Underlined"没有显示出任何差异。然后将 android:backgroundTintandroid:backgroundTintMode给予微调器,它起作用了。

 <Spinner
     android:id="@+id/spBookingType"
     android:spinnerMode="dropdown"
     android:layout_marginLeft="16dp"
     android:layout_marginRight="16dp"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     style="@style/Base.Widget.AppCompat.Spinner.Underlined"
     android:backgroundTint="#ff000000"
     android:backgroundTintMode="src_in" />
Run Code Online (Sandbox Code Playgroud)


Kes*_*era 5

在 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>
Run Code Online (Sandbox Code Playgroud)

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

在布局中

 <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>
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)