我遇到了同樣的問題。我終於想出了一個合理的解決方案。我有一個min api版本8,目標api爲11.我不喜歡holo樣式,所以我重寫了以下樣式:
首先,您必須創建一個「res/values-v11」夾。你可能已經有了一個「values」文件夾,只需在同一級別創建一個「values-v11」(無論你的目標API級別是什麼......總是使用「values-v11」)。
創建完成後,您將在每個文件夾中創建一個包含主題的XML文檔。原始值文件夾將用於比android 3.0更低的任何內容(< api 11)。你的主題看起來像這樣。我不是用河洛主題,而是使用Theme.Black.NoTitleBar主題爲母體
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.Black.OptionalActionBar" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowNoTitle">True</item>
<item name="android:windowActionBar">False</item>
</style>
<style name="OptionalVisibility">
<item name="android:visibility">visible</item>
</style>
</resources>
通知。從那裏,我設置了隱藏窗口標題和動作欄的選項,以低於api 11.
然後,我在「values-v11」文件夾中創建第二個主題文檔,並將其設置爲:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.Black.OptionalActionBar" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowNoTitle">false</item>
<item name="android:windowActionBar">true</item>
<item name="android:actionBarStyle">@android:style/Widget.Holo.ActionBar</item>
</style>
<style name="OptionalVisibility">
<item name="android:visibility">invisible</item>
<item name="android:height">1dp</item>
</style>
</resources>
在上面的主題,它使操作欄,並與河洛主題設置它,而是獨自離開所有其他元素。因此,操作欄看起來像是「全息」,但其他所有內容都與低版本保持完全一樣(我沒有收到Holo附帶的醜陋文本條目)。
然後在,如果我想有動作條顯示的清單,我只設置爲活動主題,以android:theme="@style/Theme.Black.OptionalActionBar"
我這樣做,特別是因爲我所依託的,現在已經過時,失敗對我的佈局,硬件菜單按鈕。通過使用上述主題,如果需要,可以設置操作欄,或者如果它是較舊的設備,則將其保留爲菜單。然後,我所要做的就是在我的菜單創建方法上設置一個屬性,以無縫地支持2.0到4.0。
無論如何,請看看它是否能讓你到達需要的地方。
在我看來,這比其他方法容易得多,因爲您不必記得請求操作欄或執行代碼中的任何操作。你只需在你的活動中設置你的主題......然後離開你。
所以我必須將actionBar添加到主題本身?感謝您解釋錯誤 – EGHDK 2012-07-08 01:19:47
@EGHDK我剛剛更新了我的答案,以解釋「該怎麼做」部分。 – 2012-07-08 01:24:20
仍然崩潰我的應用程序。似乎仍然在logcat中獲得nullPointer。 – EGHDK 2012-07-08 01:28:08