【发布时间】:2019-09-25 09:06:53
【问题描述】:
我需要为 Spinner 应用自定义样式。
这些是我在 styles.xml 中的样式:
<style name="spinnerItemStyle">
<item name="android:textColor">@color/font</item>
<item name="android:textSize">@dimen/small_text</item>
</style>
<style name="spinnerDropDownItemStyle">
<item name="android:padding">10dp</item>
<item name="android:textColor">@color/font</item>
<item name="android:textSize">@dimen/small_text</item>
<item name="android:background">@color/unpressed2</item>
</style>
我正在布局中这样做:
android:spinnerItemStyle="@style/spinnerItemStyle" android:spinnerDropDownItemStyle="@style/spinnerDropDownItemStyle"
<Spinner
android:id="@+id/songSpinner"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="30dp"
android:layout_marginRight="30dp"
android:textSize="@dimen/small_text"
android:entries="@array/songs_array"
android:spinnerItemStyle="@style/spinnerItemStyle"
android:spinnerDropDownItemStyle="@style/spinnerDropDownItemStyle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.18"
app:layout_constraintTop_toBottomOf="@+id/musicSeekBar"
app:layout_constraintWidth_percent="0.5" />
问题在于 Spinner 忽略了应用的样式。
我还发现,如果我在 styles.xml 中的自定义应用程序主题中执行此操作,它可以完美运行:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="colorButtonNormal">@color/unpressed2</item>
<item name="android:buttonStyle">@style/ButtonColor</item>
<item name="android:textColor">@color/font</item>
<!-- spinner styles -->
<item name="android:spinnerItemStyle">
@style/spinnerItemStyle
</item>
<item name="android:spinnerDropDownItemStyle">
@style/spinnerDropDownItemStyle
</item>
</style>
为什么使用我的第二种方法而不是第一种方法?
【问题讨论】:
-
android:spinnerItemStyle和spinnerDropDownItemStyle是在主题级别定义的属性。这并不意味着您可以在您的View中使用android:spinnerItemStyle。您可以定义<style name="CustomSpinner" parent="AppTheme"> <item name="android:spinnerItemStyle">@style/spinnerItemStyle</item> <item name="android:spinnerDropDownItemStyle">@style/spinnerDropDownItemStyle</item> </style>之类的内容,然后在您的Spinner布局中使用android:theme="@style/CustomSpinner"属性
标签: android android-layout styles android-theme android-styles