我正在尝试更改ListPreference的弹出对话框的样式,就像在此answer中看到的那样。例如,我希望对话框使用不同的背景颜色。
到目前为止,我尝试将自定义样式应用于:
<item name="android:dialogTheme">@style/AlertDialogStyle</item>
<item name="android:alertDialogTheme">@style/AlertDialogStyle</item>
<item name="android:alertDialogStyle">@style/AlertDialogStyle</item>
<item name="android:dialogPreferenceStyle">@style/AlertDialogStyle</item>
<style name="AlertDialogStyle" parent="AlertDialog.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColor">@color/lightGrey</item>
<item name="android:background">@color/cardBackground</item>
<item name="android:popupBackground">@color/cardBackground</item>
<item name="android:windowBackground">@color/cardBackground</item>
<item name="android:itemBackground">@color/cardBackground</item>
</style>
但是我的样式仍然没有应用/背景颜色没有改变。
以下是我的ListPreference的弹出对话框的外观:
这是我要存档的颜色主题(基本上与我在其他对话框中使用的主题相同):
要快速重现我的问题->我的项目位于github
答案 0 :(得分:5)
回答我自己的问题。最后,它就像替换一样简单:
<item name="alertDialogTheme">@style/AlertDialogStyle</item>
使用
words.groupBy(
window($"timestamp", "1 day", "5 minutes"),
$"word"
)
答案 1 :(得分:0)
我认为您正在将标记中的内容混合在一起。 alertDialogStyle和alertDialogTheme都不同。
自定义警报对话框主题,您应该创建Dialog主题,该主题可能应该扩展@android:style / Theme.Dialog.Alert
<item name="android:dialogTheme">@style/dialogAlertTheme</item>
<item name="android:alertDialogTheme">@style/dialogAlertTheme</item>
<item name="android:alertDialogStyle">@style/AlertDialogStyle</item>
<item name="android:dialogPreferenceStyle">@style/AlertDialogStyle</item>
<style name="dialogAlertTheme" parent="@android:style/Theme.Dialog.Alert">
<item name="android:windowBackground">[...]</item>
[...]
</style>
<style name="AlertDialogStyle" parent="AlertDialog.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColor">@color/lightGrey</item>
<item name="android:background">@color/cardBackground</item>
<item name="android:popupBackground">@color/cardBackground</item>
<item name="android:windowBackground">@color/cardBackground</item>
<item name="android:itemBackground">@color/cardBackground</item>
</style>
注意-1。自定义警报对话框样式仅限于提供(背景)可绘制对象。
注意-2。自定义警报对话框主题会打开一种方法,以提供诸如windowBackground,windowTitleStyle等属性,但是您需要一个支持主题的alertDialogThem属性/项目的Android版本>
答案解释:如果您从android:
上删除android:alertDialogTheme
<item name="alertDialogTheme">@style/AlertDialogStyle</item>
现在,这是覆盖AlertDialog样式的标准方法。它是lib的一部分,因为AlertDialog不会使用主主题的强调色,但是自v24.2.0.0以来已被删除,因为Android团队已修复此问题。
问题参考: https://github.com/Gericop/Android-Support-Preference-V7-Fix/issues/52#issuecomment-255759293
答案 2 :(得分:-1)
根据您要调用的时间/地点的多少,可以创建一个DialogFragment来处理此问题。
DialogFragment可以很简单:
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mText = getArguments().getString("remark");
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//builder.setTitle("Remarks");
builder.setMessage(mText);
builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
return builder.create();
}
这将自动创建带有取消按钮的简单对话框。
要添加样式:,请在super.onCreate
之后添加以下内容:
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.AlertDialogStyle);
或者您可以通过创建自己的布局来做更多定制:fragment_dialogfragment_alert.xml
然后在类中,使用onCreateView
代替onCreateDialog
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_dialogfragment_alert, container, false);
...
}