画像のようにスピナーの右下隅にある小さな三角形の色を変更するにはどうすればよいですか?現在、デフォルトの灰色が表示されています。このような
正しい画像を取得するには、 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つだけ変更する手っ取り早い方法を探している場合は、リッキーのコメントで参照されている記事を参照してください。
とにかくそれを読むことをお勧めします。プロセスを非常によく説明しており、私の答えの残りを理解するのに役立つからです。
最良かつ最も簡単なソリューション:
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);
}
Lollipoponから、xmlの背景色を設定できます。
Android:backgroundTint="@color/my_color"
私は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"/>
このようにしてください。これは、問題を解決するのに役立ちます。
<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
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
を使用するとエラーがスローされます
SDKバージョン14以降のソリューション。サポートライブラリからAppCompatSpinnerを使用できます。
AppCompatSpinner spinner = (AppCompatSpinner) view.findViewById(R.id.my_spinner);
spinner.setSupportBackgroundTintList(ContextCompat.getColorStateList(context, R.color.my_color));