2011-04-15 122 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>