2011-04-15 125 views
12

我的主要優先活動設置爲"@android:style/Theme.Light"。我的一個首選項是一個DialogPreference,其對話框包含一個ListView。 ListView的對話是深灰色(因爲DialogPreference使用AlertBuilder它創建深灰色對話框),並在列表中的文字爲黑色(因爲Theme.Light導致列表視圖,有黑色文本)。有沒有一種簡單的方法來讓ListView的行爲與黑暗對話框的風格相同?或者讓黑暗的對話與小動作具有相同的風格?Android:DialogPreference顏色/樣式?

編輯:

基於梅林的意見,好像我應該嘗試做的是創造一個LightDialog主題。爲了做到這一點,我試過:1.擴大Android的Theme.Light和Theme.Dialog

加入dialogy性能
<style name="Theme.LightDialog" parent="@android:style/Theme.Light"> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item> 
    <item name="android:windowBackground">@android:drawable/panel_background</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
</style> 

...和2擴展Android的Theme.Dialog和主題加入萊蒂性能。光。

<style name="Theme.LightDialog" parent="@android:style/Theme.Dialog"> 
      <item name="android:windowBackground">@drawable/screen_background_light</item> 
      <item name="android:colorBackground">@android:color/background_light</item> 
      <item name="android:colorForeground">@androidcolor/bright_foreground_light</item> 
      <item name="android:colorForegroundInverse">@android:color/bright_foreground_light_inverse</item> 
      <item name="android:textColorPrimary">@android:color/primary_text_light</item> 
      <item name="android:textColorSecondary">@android:color/secondary_text_light</item> 
      <item name="android:textColorTertiary">@android:color/tertiary_text_light</item> 
      <item name="android:textColorPrimaryInverse">@android:color/primary_text_dark</item> 
      <item name="android:textColorSecondaryInverse">@android:color/secondary_text_dark</item> 
      <item name="android:textColorTertiaryInverse">@android:color/tertiary_text_dark</item> 
      <item name="android:textColorPrimaryDisableOnly">@android:color/primary_text_light_disable_only</item> 
      <item name="android:textColorPrimaryInverseDisableOnly">@android:color/primary_text_dark_disable_only</item> 
      <item name="android:textColorPrimaryNoDisable">@android:color/primary_text_light_nodisable</item> 
      <item name="android:textColorSecondaryNoDisable">@android:color/secondary_text_light_nodisable</item> 
      <item name="android:textColorPrimaryInverseNoDisable">@android:color/primary_text_dark_nodisable</item> 
      <item name="android:textColorSecondaryInverseNoDisable">@android:color/secondary_text_dark_nodisable</item> 
      <item name="android:textColorHint">@android:color/hint_foreground_light</item> 
      <item name="android:textColorHintInverse">@android:color/hint_foreground_dark</item> 
    </style> 

這兩種嘗試都失敗了,因爲它們使用了非公共屬性。有關如何創建LightDialog主題的任何建議?

回答

4

在Android中創建樣式時,您可以繼承defult主題。

請仔細閱讀繼承

Applying Styles and Themes特別是部分中的文檔,您應該能夠採取Theme.light並糾正你有任何問題。

您可能會發現,不同的供應商改變其設備上的主題,所以如果你的目標範圍廣泛的硬件,那麼你可能會更好創建一個完整的主題,以確保您的應用在所有平臺上是一致的。

UPDATE

正如這個答案Consistent UI color in all Android devices說有公立和非公立屬性。答案提供了一個公共屬性列表的鏈接,但是kernel.org仍然處於關閉狀態,因此您需要深入瞭解源代碼:core/res/res/values/public.xml

+0

我試圖創建一個主題根據您的建議,但沒有成功。請參閱我的編輯。 – ab11 2011-10-06 15:48:06

+0

這是一個單獨的問題,應張貼例如,而不是改變原來的上下文。 – Merlin 2011-10-06 15:51:44

+0

夠公平的,我會單獨發佈,並將其標記爲已回答。 – ab11 2011-10-06 16:07:09

0

我有一個解決方案,您可以通過編程方式執行它(我認爲它更簡單):

public class CustomDialogPreference extends DialogPreference { 

... 

@Override 
protected void showDialog(Bundle state) { 
    super.showDialog(state); 

//changing color of divider 
    int divierId = getDialog().getContext().getResources() 
      .getIdentifier("android:id/titleDivider", null, null); 
    View divider = getDialog().findViewById(divierId); 
    divider.setBackgroundColor(getContext().getResources().getColor(R.color.light_orange)); 

//changing color of title textview 
    int titleId = getDialog().getContext().getResources() 
      .getIdentifier("android:id/alertTitle", null, null); 
    TextView title = (TextView) getDialog().findViewById(titleId); 
    title.setTextColor(getContext().getResources().getColor(R.color.light_orange)); 
} 

... 

} 
+0

此代碼引發NotFoundException – 2015-06-19 12:49:23

1

您可以指定使用android:alertDialogTheme(支持從API 11開始DialogPreference的對話風格)他們的喜好活動的性質:

<style name="PreferencesActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">   
    <item name="android:alertDialogTheme">@style/Theme.MyDialog</item> 
</style> 

<style name="Theme.MyDialog" parent="@style/Theme.AppCompat.Light.Dialog"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style>