gpt4 book ai didi

Android:显示来自 Theme.Light Activity 的对话框的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:35 24 4
gpt4 key购买 nike

我正在尝试从设置为 Theme.Light 的 PreferenceActivity 中显示一个对话框。该对话框在深色背景上显示深色文本:

enter image description here

我假设它使用深色文本,因为它继承了父 Activity 或类似内容的文本颜色。我希望对话框在深色背景上使用白色文本,或者使用带有深色文本的白色背景,就像 PreferenceActivity 在设置为 Theme.Light 时所做的那样。

这似乎是一个已知问题,我发现的解决方法涉及创建和使用扩展 Theme.Dialog 的自定义样式,并使用它来实例化对话框。像这样的东西:

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:textColor">?android:attr/textColorPrimaryInverseDisableOnly</item>
</style>

Dialog dialog = new Dialog(context, R.style.CustomDialog);

我试过了,但没有任何区别。我还尝试了一些不同的 textColor 值,但没有一个修改了对话框的文本颜色。作为完整性检查,我添加了:

     <item name="android:background">#FFFF0000</item>

样式,这导致了一个带有红色背景的对话框(所以我确定我正确地实例化了对话框)。

我最接近的解决方案是将对话框的背景颜色设置为白色,这会产生以下对话框。但这不是一个好的解决方案,因为某些版本或某些设备可能不会使用我在反转文本颜色时看到的相同行为:

enter image description here

那么,有没有一种好的方法可以在 Theme.Light Activity 显示的对话框上设置文本颜色?

最佳答案

我假设您使用 AlertDialog.Builder 并使用 setSingleChoiceItems 方法之一设置列表,该方法不使用您自己的 ListAdapter .相反,它使用错误的样式创建了自己的样式。要解决此问题,您应该调用 setSingleChoiceItems(ListAdapter adapter, int checkedItem, DialogInterface.OnClickListener listener) 并提供这样一个适配器,它将使用具有所需样式的布局。

现在,为什么会这样。实际的适配器创建发生在文件 com.android.internal.app.AlertController 中,其中以下行选择单选列表的布局:

int layout = mIsSingleChoice 
? R.layout.select_dialog_singlechoice : R.layout.select_dialog_item;

这是前面提到的布局:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/primary_text_light_disable_only"
android:gravity="center_vertical"
android:paddingLeft="12dip"
android:paddingRight="7dip"
android:checkMark="@android:drawable/btn_radio"
android:ellipsize="marquee"
/>

如您所见,设置文本颜色的行不包含对主题的引用,而是包含固定颜色。这就是为什么当这个东西在列表创建过程中膨胀时,它总是使用相同的颜色,不管你想让它使用什么样式。因此,解决此问题的正确做法是使用您自己的布局和您自己的 ListAdapter

关于Android:显示来自 Theme.Light Activity 的对话框的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7771230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com