gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:08:29 26 4
gpt4 key购买 nike

在过去的几天里,我阅读了很多关于在 Android 中自定义 AlertDialogs 的问题、答案和解决方案。尽管如此,他们都没有完全帮助我。

所以我的问题是:
通过 setSingleChoiceItems 添加项目时使用什么布局元素或 setItemsAlertDialog ?

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

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

我的自定义对话框如下所示:
enter image description here

如您所见,我将标题的背景和按钮染成白色,并将标题本身和分隔线染成红色,但没有将这些单选项目的颜色染成红色。
为此,我查看了 android-sources,特别是“alert_dialog_holo.xml”。我找到了 AlertDialog由多个 LinearLayouts 组成相互嵌套(我从第二个链接中采用了这种方法)。在确定了我想要设置样式的元素后,我使用了 Link 1 的方法(定义 onShowListenerAlertDialog )来改变它们的颜色。这对每个元素都非常有效,无论是标题、分隔线、按钮还是内容(标准文本内容以及自定义内容,例如 DatePicker )。
现在我被困在最后一部分(见上面的问题),因为这些项目似乎没有被加载到 ScrollView 中。的“正常”内容,FrameLayout自定义内容(我设法用白色背景设置样式)。
所以有人可以指点我在方法setSingleChoiceItems中使用的布局元素吗?或 setItems被使用?

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

对话框的创建:

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) {
currency = getResources().getStringArray(R.array.currencies)[which].substring(0, 1);
}
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// doSomething with clicked item
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
dialog.setOnShowListener(new DialogOnShowListener()); // here happens the styling
dialog.show();

对话框的样式(摘录,但应该足以理解):
@Override
public void onShow(DialogInterface dialog) {
Dialog d = ((Dialog) dialog);

int divierId = d.getContext().getResources()
.getIdentifier("android:id/titleDivider", null, null);
View divider = d.findViewById(divierId);
divider.setBackgroundColor(red); // earlier defined color-int
}

预先感谢, chuky

最佳答案

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

这感觉像是一个非常糟糕的解决方案,但我只是在单击列表元素的那一刻搜索它的 ID,显然每个列表元素都可以使用此 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 的 ID小号 toString -方法是“android:id/select_dialog_listview”。

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


问候,胖乎乎的

关于android - 使用 setSingleChoiceItems/setItems 更改 AlertDialog 中项目的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20303430/

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