2

在我的应用程序中,我在任何地方都使用 holoever。我想更改 AlertDialog 的外观,但我卡在了警报对话框下方的按钮上。我查看了 holoeverywhere 中的事情是如何完成的,并尝试对其进行修改。这是我的推理的回溯:

在主题中有定义alertDialogTheme和其他一些东西的属性。我们稍后也会回到selectableItemBackground

<style name="Holo.Base.Theme" parent="Theme.AppCompat">
    ...
    <item name="alertDialogTheme">@style/Holo.Theme.Dialog.Alert</item>
    ...
    <item name="buttonBarButtonStyle">?borderlessButtonStyle</item>
    ...
    <item name="selectableItemBackground">@drawable/item_background_holo_dark</item> *
    ...
</sytle>

所以我认为 alertDialogStyle是我的目标,在样式中进一步定义:

<style name="Holo.Base.Theme.Dialog" parent="Holo.Theme">
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowAnimationStyle">@style/Holo.Animation.Dialog</item>
    <item name="android:windowBackground">@drawable/dialog_full_holo_dark</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:windowTitleStyle">@style/Holo.DialogWindowTitle</item>
    <item name="borderlessButtonStyle">@style/Holo.Button.Borderless.Small</item>
    <item name="buttonBarStyle">@style/Holo.ButtonBar.AlertDialog</item>
    <item name="listPreferredItemPaddingLeft">16dip</item>
    <item name="listPreferredItemPaddingRight">16dip</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="windowAnimationStyle">@style/Holo.Animation.Dialog</item>
    <item name="windowContentOverlay">@null</item>
    <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
    <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="Holo.Theme.Dialog" parent="Holo.Base.Theme.Dialog" >
</style>

<style name="Holo.Theme.Dialog.Alert" parent="Holo.Theme.Dialog">
    <item name="alertDialogStyle">@style/Holo.AlertDialog</item>
    <item name="alertDialogTitleDividerColor">@color/holo_blue_light</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

<style name="Holo.Button.Borderless" parent="Holo.Button">
    <item name="android:background">?selectableItemBackground</item>
    <item name="android:paddingLeft">4dip</item>
    <item name="android:paddingRight">4dip</item>
</style>

所以 Holo.Theme.Dialog.Alert 是从 Holo:base.Theme.Dialog 继承的,它有一个borderlessButtonStyle的属性,我猜它定义了警报对话框的按钮。样式 Holo.Button.Borderless为其背景引用属性selectableItemBackground 。属性在应用程序主题本身中设置。因此,我的理由是,如果我从主题 Holo.theme 继承并设置selectableBackground属性,我的更改应该反映在自定义警报对话框按钮以及使用此背景的所有其他内容中。

<style name="ThemeCustom" parent="@style/Holo.Theme>
… 
<item name="selectableItemBackground">@drawable/custom_item_background </item>
…
</style>

但这不起作用。警报对话框按钮中看不到任何更改。我的推理有问题吗?

4

0 回答 0