Android 带下划线的微调器
Android spinner with underline appcompat
我正在为我的应用程序使用 appcompat 主题。需要知道如何向微调器显示下划线。它只是显示锚点。我尝试使用 android:background 设置下划线,但它会使锚点消失。
更新您的支持库并在 XML 中使用
请将此样式添加到您的 Spinner
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
这是更改 appcompat 主题中的微调器和下划线颜色的 hacky(而不是完美的)方法。我自定义的要点Android支持库图片和xml文件变色
1) 去support library package复制2张图片(或者从这个post底部下载我的自定义)
/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) 创建 bottom_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) 创建 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>
P.S。我无法实现与默认微调器相同的视觉样式(如下所示的视觉变化)。如果您开始使用这个自定义微调器主题,您应该在所有项目中使用它。
所以添加到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"
/>
重要:
您应该调整微调器的大小并放置到各种可绘制文件夹中。您可以在我上面显示的相同路径中找到尺寸。
有几个流行尺寸:
drawables-mdpi 20x26
drawables-hdpi 29x38
drawables-xhdpi 38x50
drawables-xxhdpi 74x98
您可以从这里获取我的自定义图像:
我的自定义_abc_spinner_mtrl_am_alpha:
我的自定义_abc_textfield_default_mtrl_alpha:
Spinner example是(xxhdpi),line是mdpi(因为我们不需要各种drawable文件夹中的各种lines,所以我们只能有1个)。
此处显示视觉差异(来自 android 工作室 xml 预览 window):
第一行是我的自定义下划线微调器,第二行是默认值 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>
============================================= ==
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>
应用 style="@style/Base.Widget.AppCompat.Spinner.Underlined"
没有显示任何区别。然后将 android:backgroundTint
和 android: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" />
我正在为我的应用程序使用 appcompat 主题。需要知道如何向微调器显示下划线。它只是显示锚点。我尝试使用 android:background 设置下划线,但它会使锚点消失。
更新您的支持库并在 XML 中使用
请将此样式添加到您的 Spinner
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
这是更改 appcompat 主题中的微调器和下划线颜色的 hacky(而不是完美的)方法。我自定义的要点Android支持库图片和xml文件变色
1) 去support library package复制2张图片(或者从这个post底部下载我的自定义)
/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) 创建 bottom_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) 创建 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>
P.S。我无法实现与默认微调器相同的视觉样式(如下所示的视觉变化)。如果您开始使用这个自定义微调器主题,您应该在所有项目中使用它。
所以添加到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"
/>
重要: 您应该调整微调器的大小并放置到各种可绘制文件夹中。您可以在我上面显示的相同路径中找到尺寸。 有几个流行尺寸:
drawables-mdpi 20x26
drawables-hdpi 29x38
drawables-xhdpi 38x50
drawables-xxhdpi 74x98
您可以从这里获取我的自定义图像:
我的自定义_abc_spinner_mtrl_am_alpha:
我的自定义_abc_textfield_default_mtrl_alpha:
Spinner example是(xxhdpi),line是mdpi(因为我们不需要各种drawable文件夹中的各种lines,所以我们只能有1个)。
此处显示视觉差异(来自 android 工作室 xml 预览 window):
第一行是我的自定义下划线微调器,第二行是默认值 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>
============================================= ==
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>
应用 style="@style/Base.Widget.AppCompat.Spinner.Underlined"
没有显示任何区别。然后将 android:backgroundTint
和 android: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" />