web-dev-qa-db-ja.com

androidでスピナーの小さな三角形の色を変更する

enter image description here

画像のようにスピナーの右下隅にある小さな三角形の色を変更するにはどうすればよいですか?現在、デフォルトの灰色が表示されています。このような

enter image description here

49
Yawar

正しい画像を取得するには、 Android Asset Studio サイトに移動して、 Android Holo Colors Generator を選択します。これにより、「三角形」を含む必要なすべてのアセットが作成されます。また、変更を実装するXMLファイルも生成します。


XMLファイルの例は次のとおりです。

カスタムカラー:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="apptheme_color">#33b5e5</color>
</resources>

カスタムスピナースタイル:

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <style name="SpinnerAppTheme" parent="Android:Widget.Spinner">
      <item name="Android:background">@drawable/apptheme_spinner_background_holo_light</item>
      <item name="Android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item>
  </style>

  <style name="SpinnerDropDownItemAppTheme" parent="Android:Widget.DropDownItem.Spinner">
      <item name="Android:checkMark">@drawable/apptheme_btn_radio_holo_light</item>
  </style>
</resources>

カスタムアプリケーションテーマ:

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <style name="AppTheme" parent="@style/_AppTheme"/>

  <style name="_AppTheme" parent="Theme.AppCompat.Light">

    <item name="Android:spinnerStyle">@style/SpinnerAppTheme</item>

    <item name="Android:spinnerDropDownItemStyle">@style/SpinnerDropDownItemAppTheme</item>

  </style>

</resources>

ご覧のとおり、これらのスタイルによって参照される多くのドロウアブルもあります。

変更したい「三角形」に固有のものは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.Apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false"
          Android:drawable="@drawable/apptheme_spinner_disabled_holo_light" />
    <item Android:state_pressed="true"
          Android:drawable="@drawable/apptheme_spinner_pressed_holo_light" />
    <item Android:state_pressed="false" Android:state_focused="true"
          Android:drawable="@drawable/apptheme_spinner_focused_holo_light" />
    <item Android:drawable="@drawable/apptheme_spinner_default_holo_light" />
</selector>

すべてのファイルを完全にリストするのに適切な場所だとは思いません。すべてのファイルを参照ツールから直接取得できるからです。


注:これは、すべてのスピナーがカスタムスタイルに更新されるようにアプリ全体をテーマ化する方法です。

スピナーを1つだけ変更する手っ取り早い方法を探している場合は、リッキーのコメントで参照されている記事を参照してください。

とにかくそれを読むことをお勧めします。プロセスを非常によく説明しており、私の答えの残りを理解するのに役立つからです。

18

最良かつ最も簡単なソリューション:

spinner.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

すべてのスピナーを変更したくない場合は、他のソリューション(Simonに感謝):

Drawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable();

spinnerDrawable.setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

if (Android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    spinner.setBackground(spinnerDrawable);
}else{
    spinner.setBackgroundDrawable(spinnerDrawable);
}
80
toni

Lollipoponから、xmlの背景色を設定できます。

Android:backgroundTint="@color/my_color"
37
Luis

私はAndroid開発でまだ非常に新しいので、たぶん一言でアドバイスを受けますが、ここでの答えはどれも私が使っていたスピナーの実装に関係しているようには見えませんでした。

探していたもの

Android:backgroundTint="@color/colorPrimary"

<Spinner>タグ全体は次のとおりです。

        <Spinner
            Android:id="@+id/coin_selector"
            Android:layout_width="wrap_content"
            Android:layout_height="21dp"
            Android:layout_margin="26dp"
            Android:layout_weight="1"
            Android:textColor="#FFFFFF"
            Android:dropDownSelector="@color/colorAccent"
            Android:backgroundTint="@color/colorPrimary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            tools:layout_editor_absoluteY="89dp"/>

Blue triangle

10
jessems

このようにしてください。これは、問題を解決するのに役立ちます。

<RelativeLayout 
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:background="spinner background image">

        <Spinner       
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"        
        Android:background="@null"/>

        <ImageView 
         Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:src="arrow image" />

    </RelativeLayout>

または

私が別のクエリに与えた答えを見てみましょう: Custom Spinner

5
RIJO RV

MinSdkVersion 21を使用している場合、非常に簡単です。

<Spinner
style="@style/Widget.AppCompat.DropDownItem.Spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:backgroundTint="@color/triangleColor" />

ここで、triangleColorは色です。

これをプログラムで解決する他の方法もあります。 (API 19以降でテスト済み)。

これにはViewCompatを使用します。

ViewCompat.setBackgroundTintList(spinner, ColorStateList.valueOf(your_color));

spinner.setSupportBackgroundTintListを使用するとエラーがスローされます

4
sud007

SDKバージョン14以降のソリューション。サポートライブラリからAppCompatSpinnerを使用できます。

AppCompatSpinner spinner = (AppCompatSpinner) view.findViewById(R.id.my_spinner);
spinner.setSupportBackgroundTintList(ContextCompat.getColorStateList(context, R.color.my_color));
3
vmayatskii