アプリケーションにappcompatテーマを使用しています。スピナーに下線を表示する方法を知る必要があります。アンカーを表示しているだけです。 Android:backgroundを使用して下線を設定しようとしましたが、アンカーが消えます。
サポートライブラリを更新し、XMLを使用する
このスタイルをスピナーに追加してください
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
これは、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の2番目の最下行の色を変更します(以下の添付の小さな画像で確認できます)
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>
追伸デフォルトのスピナーと同じ視覚スタイルを実現できませんでした(視覚的な変更を以下に示します)。このカスタムスピナーテーマの使用を開始する場合は、すべてのプロジェクトで使用する必要があります。
そのため、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
ここからカスタマイズした画像を取得できます:
my_custom_abc_spinner_mtrl_am_alpha:
my_custom_abc_textfield_default_mtrl_alpha:
Spinnerの例は(xxhdpi)、lineはmdpiです(さまざまなドローアブルフォルダーにさまざまな行が必要ないため、1つしか持てません)。
視覚的な違い(Android studio xmlプレビューウィンドウ)から)は次のとおりです。
最初の行はカスタムの下線スピナーで、2行目はデフォルトの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>
===============================================
<?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" />