使用setSingleChoiceItems / setItems更改AlertDialog中项目的背景颜色

时间:2013-11-30 17:35:19

标签: android alertdialog android-alertdialog

在过去的几天里,我阅读了许多有关Android中AlertDialogs自定义的问题,答案和解决方案。但是,他们都没有完全帮助我。

所以我的问题是:
通过setSingleChoiceItemssetItemsAlertDialog添加项目时使用什么Layout元素?

注意:我想在代码中设置样式,而不是通过主题/样式解决方案!

到目前为止,我使用了以下答案的组合来实现自定义标题,标题内容分隔符和不同的按钮颜色。
Android - AlertDialog styling
Changing the background drawable of the searchview widget

我自定义的Dialog如下所示: enter image description here

正如你所看到的那样,我实现了将标题和按钮的背景染成白色以及将标题本身和分隔符着色为红色而不是那些单选项的颜色。 为此,我看了一下android-sources,特别是“alert_dialog_holo.xml”。我发现AlertDialog是由多个LinearLayouts构建而成的(我从第二个链接中采用了这种方法)。在确定了我想要样式的元素之后,我使用了Link 1(定义{{​​1}}到onShowListener)的方法来改变它们的颜色。这对于每个元素都很有效,无论是标题,分隔符,按钮甚至内容(标准文本内容以及AlertDialog等自定义内容)。 现在我停留在最后一部分(请参阅上面的问题),因为似乎这些项目没有加载到“{1}}的”普通“内容中,也不会加载到自定义内容的DatePicker中(我设法用白色背景设计) 那么有人可以指出我使用方法ScrollViewFrameLayout时使用的布局元素吗?

为了完成,我添加代码如何创建显示的AlertDialog,以及我如何设置样式:

创建对话框:

setSingleChoiceItems

对话框的样式(摘录,但应该足以让我们了解):

setItems

提前致谢,chuky

1 个答案:

答案 0 :(得分:0)

猜猜我找到了解决方案,所以如果其他人都应该遇到这个问题我就是这样做的:

这感觉就像一个非常糟糕的解决方案,但我只是在点击它时搜索了List-Element的ID,显然每个List-Element都可以用这个ID设置样式。
我用来获取ID的代码如下:

AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(getString(R.string.currency_choose))
.setCancelable(false)
.setSingleChoiceItems(R.array.currencies, 0, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        // -------------- here I got the ID ----------- //
        System.out.println(((Dialog)dialog).getCurrentFocus().toString());
        // doSomething with clicked item
    }
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        DBs.getDBSettings().writeSetting("CURRENCY", currency);
    }
})
.setNegativeButton(android.R.string.cancel, null)
.create();
dialog.setOnShowListener(new DialogOnShowListener());
dialog.show();

View s toString - 方法中的ID是“ android:id / select_dialog_listview ”。

最后是截图显示我的解决方案:

问候,chuky