首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 4.0+ 平台上 Spinner/NumberPicker 顯示舊主題的修正方法

     編輯:程式設計綜合問答

問題現象

在 Jelly Bean (4.1) 設備上,Spinner 與 NumberPicker 呈現 Gingerbread (2.x) 風格,而非 Holo 主題。即使在 XML 中設定 style="@android:style/Theme.Holo" 也無效。

原因分析

style 屬性僅套用於單一 View,不會改變整個 Activity/Application 的主題。且 Theme.Holo 是應用/Activity 級主題,不可直接用於 View 的 style。

正確解決方案

方案一:應用/Activity 級主題(推薦)

在 AndroidManifest.xml 設定應用主題:

<application android:theme="@style/MyTheme" ...>

定義版本化主題資源:

<!-- res/values/styles.xml -->
<style name="MyTheme" parent="android:Theme.Light"></style>

<!-- res/values-v11/styles.xml -->
<style name="MyTheme" parent="android:Theme.Holo.Light"></style>

方案二:單一 View 指定 Widget 樣式

若僅需特定 Spinner 使用 Holo 風格:

<Spinner
    android:id="@+id/spinnermap"
    style="@style/MySpinner"
    ... />
<!-- res/values/styles.xml -->
<style name="MySpinner" parent="android:Widget.Spinner"></style>

<!-- res/values-v11/styles.xml -->
<style name="MySpinner" parent="android:Widget.Holo.Spinner"></style>

NumberPicker 同理

使用 android:Widget.Holo.NumberPicker 作為 v11 以上的 parent。

總結

透過版本限定資源目錄(values-v11 等)定義不同父主題,系統會自動依 API 等級選擇正確樣式,徹底解決跨版本主題不一致問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved