我的主要偏好设置活动设为"@android:style/Theme.Light"
。我的一个偏好是DialogPreference,其Dialog包含ListView。 ListView的对话框为深灰色(因为DialogPreference使用AlertBuilder创建深灰色对话框),列表中的文本为黑色(因为Theme.Light导致listViews有黑色文本)。是否有一种简单的方法可以使ListView的行为与黑暗对话框相同?或者让黑暗对话框的行为与灯光活动相同?
编辑:
根据Merlin的评论,似乎我应该尝试做的是创建一个LightDialog主题。为了做到这一点,我试过:1。扩展android的Theme.Light并从Theme.Dialog添加对话框属性
<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并添加Theme.Light的轻微属性。
<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主题的任何建议吗?
答案 0 :(得分:4)
在Android中创建样式时,您可以继承defult主题。
请阅读Applying Styles and Themes上的文档,特别是有关继承的部分
您应该能够使用Theme.light并更正您遇到的任何问题。
您可能会发现不同的供应商会更改其设备上的主题,因此如果您要定位广泛的硬件,那么您可能最好创建一个完整的主题,以确保您的应用在所有平台上都是一致的。
<强>更新强>
如本回答Consistent UI color in all Android devices所述,有公共和非公共属性。答案提供了一个公共属性列表的链接,但是kernel.org仍处于关闭状态,因此您需要深入了解core/res/res/values/public.xml的来源
答案 1 :(得分:1)
您可以使用DialogPreference
(从android:alertDialogTheme
开始支持)首选项活动的属性来指定API 11
对话框的样式:
<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>
答案 2 :(得分: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));
}
...
}