web-dev-qa-db-ja.com

Android下線付きのスピナーappcompat

アプリケーションにappcompatテーマを使用しています。スピナーに下線を表示する方法を知る必要があります。アンカーを表示しているだけです。 Android:backgroundを使用して下線を設定しようとしましたが、アンカーが消えます。

45
Pritam Kadam

サポートライブラリを更新し、XMLを使用する

このスタイルをスピナーに追加してください

    style="@style/Base.Widget.AppCompat.Spinner.Underlined"
125
Pritam Kadam

これは、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_spinner_mtrl_am_alpha

my_custom_abc_textfield_default_mtrl_alpha:

my_custom_abc_textfield_default_mtrl_alpha

Spinnerの例は(xxhdpi)、lineはmdpiです(さまざまなドローアブルフォルダーにさまざまな行が必要ないため、1つしか持てません)。

視覚的な違い(Android studio xmlプレビューウィンドウ)から)は次のとおりです。

enter image description here

最初の行はカスタムの下線スピナーで、2行目はデフォルトのBase.Widget.AppCompat.Spinner.Underlinedです

7
Ragaisis

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>
4
Keshav Gera

申請中 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" />
2
Annu