【问题标题】:android:style not applying in xml layoutandroid:style 不适用于 xml 布局
【发布时间】: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:spinnerItemStylespinnerDropDownItemStyle 是在主题级别定义的属性。这并不意味着您可以在您的View 中使用android:spinnerItemStyle。您可以定义&lt;style name="CustomSpinner" parent="AppTheme"&gt; &lt;item name="android:spinnerItemStyle"&gt;@style/spinnerItemStyle&lt;/item&gt; &lt;item name="android:spinnerDropDownItemStyle"&gt;@style/spinnerDropDownItemStyle&lt;/item&gt; &lt;/style&gt; 之类的内容,然后在您的Spinner 布局中使用android:theme="@style/CustomSpinner" 属性

标签: android android-layout styles android-theme android-styles


【解决方案1】:

styles.xml 文件

在您的 styles.xml 文件中添加以下 xml 代码。

<style name="CustomSpinner" parent="AppTheme">

     <item name="android:spinnerItemStyle">@style/spinnerItemStyle</item> 
     <item name="android:spinnerDropDownItemStyle">@style/spinnerDropDownItemStyle</item> 

</style>

yourlayout.xml

在 Spinner 中使用这种样式

例如:-

<Spinner
       android:id="@+id/songSpinner"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/CustomSpinner">
  </Spinner>

【讨论】:

  • 只是为了复制我的评论。
  • @GabrieleMariotti Sir 请系统地输入您的答案,许多用户无法理解评论答案,所以我系统地输入了答案。
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2016-04-19
  • 2013-12-04
相关资源
最近更新 更多