ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – ActionBarSherlock不支持光主题警报对话框?

2019-06-25 08:13:54  阅读:200  来源: 互联网

标签:android actionbarsherlock android-alertdialog android-theme


正如标题所说,我正在使用actionBarSherlock库和一个轻量级主题,有时我需要使用alertDialog.Builder类来显示一个对话框.

无论我尝试什么,主题都不适用于对话本身.主题应该适用于新API和旧API(蜂窝之前).

例:

码:

final AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(activity,
            R.style.AppTheme_LightDialog));

要么:

final AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(activity,
            R.style.Theme_Sherlock_Light_Dialog));

XML:

<style name="AppTheme_LightDialog" parent="@android:style/Theme.Light">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowTitleStyle">@style/DialogWindowTitle.Sherlock.Light</item>
    <item name="android:windowBackground">@drawable/abs__dialog_full_holo_light</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowActionModeOverlay">true</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimAmount">0.6</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:textColorPrimary">@color/abs__primary_text_holo_light</item>
    <item name="android:textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item>
    <item name="windowMinWidthMajor">@dimen/abs__dialog_min_width_major</item>
    <item name="windowMinWidthMinor">@dimen/abs__dialog_min_width_minor</item>
    <item name="windowActionBar">false</item>
    <item name="windowContentOverlay">@null</item>
    <item name="android:textAppearance">?android:attr/textAppearanceInverse</item>
</style>

我知道我可以使用dialogFragment,但还有另一种方法吗?对话框非常简单,因为它们中有很多,所以更改它们会很烦人.

编辑:我可能是错的,但似乎使用android:alertDialogStyle属性(显示here)更改旧API,但它没有很多自定义.事实上,它只支持颜色,我不知道如何设置文本颜色(标题和/或消息).

解决方法:

经过一番研究后,我认为这不是ActionBarScherlock问题,而是警报对话框中的Light Theme问题.让我们尝试一些事情:

使用:

final AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AppTheme_LightDialog));

更改:

<style name="AppTheme_LightDialog" parent="@android:style/Theme.Light">

至:

<style name="AppTheme_LightDialog" parent="@android:style/Theme.Dialog">

然后覆盖默认的“Theme.Dialog”样式(从Android git树复制粘贴):

<style name="AppTheme_LightDialog" parent="@android:style/Theme.Dialog">
    <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>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>

您可能需要将原始资源(@android:style / DialogWindowTitle,@ android:style / Animation.Dialog和@android:drawable / panel_background)复制到项目中.

最后,棘手的部分(from Shawn Castrianni),似乎Android需要一些额外的帮助才能正确地将样式应用于AlertDialog的文本.添加到“AppTheme_LightDialog”样式:

<item name="android:textColor">?android:attr/textColorPrimaryInverseDisableOnly</item>

更新:

似乎在Honeycomb之前,文本样式实际上并未应用于AlertDialogs.上面的代码为您提供了> = Honeycomb设备的解决方案.有一个有趣的解决方法,使它也可以在这些设备中工作(检查thisthis),但是你可能想开始问你是否更喜欢一种需要较少工作的不同方法.

顺便说一句,我不确定这是不是你的情况,但是如果你为AlertDialog充气自定义布局,那么你也必须使用相同的ContextThemeWrapper.例如,

更改:

View view = View.inflate(activity, R.layout.myDialog, null);

至:

View view = View.inflate(new ContextThemeWrapper(activity, R.style.AppTheme_LightDialog), R.layout.myDialog, null);

标签:android,actionbarsherlock,android-alertdialog,android-theme
来源: https://codeday.me/bug/20190625/1284302.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有