如何更改 alertDialog 中的单选按钮样式
How to change radiobutton style in alertDialog
我正在开发一个 Android 应用程序,我想在其中更改 AlertDialogs 中 RadioButton 的颜色。我希望那些 RadioButtons 与我的应用程序主题相匹配。
所以我想我应该寻找一个 Android 属性来定义我的 RadioButtons 的可绘制对象并在我的主题中修改它。
首先我发现AlertDialog 使用CheckedTextView 来显示RadioButton。在布局 select_dialog_singlechoice_holo.xml 中,我发现了这个:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
...
android:checkMark="?android:attr/listChoiceIndicatorSingle"
...
/>
然后我去了 themes.xml 并在 Holo.Light 主题中找到了这个:
<item name="listChoiceIndicatorSingle">@android:drawable/btn_radio_holo_light</item>
所以在我的主题中,我将后者更改为:
<style name="GreenTheme" parent="@android:style/Theme.Holo.Light" >
<item name="android:listChoiceIndicatorSingle">@drawable/green_radio_button</item>
</style>
不幸的是什么也没发生。
我错过了什么?
我找到了解决方法。似乎 alertDialog 以某种方式覆盖了 listChoiceIndicatorSingle 属性。所以我的解决方案是在创建选项时添加一个 ArrayAdapter,从而覆盖将由 alertDialog 使用的布局。
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
String[] items= getResources().getStringArray(choices);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_singlechoice, items);
builder.setSingleChoiceItems(adapter, checkedItem, listener);
我正在开发一个 Android 应用程序,我想在其中更改 AlertDialogs 中 RadioButton 的颜色。我希望那些 RadioButtons 与我的应用程序主题相匹配。
所以我想我应该寻找一个 Android 属性来定义我的 RadioButtons 的可绘制对象并在我的主题中修改它。
首先我发现AlertDialog 使用CheckedTextView 来显示RadioButton。在布局 select_dialog_singlechoice_holo.xml 中,我发现了这个:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
...
android:checkMark="?android:attr/listChoiceIndicatorSingle"
...
/>
然后我去了 themes.xml 并在 Holo.Light 主题中找到了这个:
<item name="listChoiceIndicatorSingle">@android:drawable/btn_radio_holo_light</item>
所以在我的主题中,我将后者更改为:
<style name="GreenTheme" parent="@android:style/Theme.Holo.Light" >
<item name="android:listChoiceIndicatorSingle">@drawable/green_radio_button</item>
</style>
不幸的是什么也没发生。
我错过了什么?
我找到了解决方法。似乎 alertDialog 以某种方式覆盖了 listChoiceIndicatorSingle 属性。所以我的解决方案是在创建选项时添加一个 ArrayAdapter,从而覆盖将由 alertDialog 使用的布局。
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
String[] items= getResources().getStringArray(choices);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_singlechoice, items);
builder.setSingleChoiceItems(adapter, checkedItem, listener);