Android:指定聚焦时以编程方式添加单选按钮的样式

时间:2014-05-02 23:23:20

标签: android android-radiobutton

我正在处理我的第一个Android应用,而且我在外观方面遇到了一些问题。我以编程方式将单选按钮添加到以线性布局定义的单选按钮组中。我使用了黑暗主题,当布局中定义的任何元素获得焦点时,它们会以黄色突出显示:具有焦点的按钮具有整体黄色高光,而具有焦点的复选框具有黄色文本。但是对于动态添加的单选按钮,当单选按钮获得焦点时,文本会变为黑色(与背景相同)。

如何指定动态添加的单选按钮在焦点上使用与其他元素相同的样式,或者为主题指定自定义焦点样式?

这是我用来添加单选按钮的代码:

RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroupVersions);
RadioGroup.LayoutParams rprms;

for(int i=0;i<installedVersionName.size();i++)
{
    RadioButton radioButton = new RadioButton(this);
    radioButton.setText(installedVersionName.get(i));
    radioButton.setId(i);
    rprms = new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    radioGroup.addView(radioButton, rprms);
}

除了为LinearLayout设置android:background="@color/black"以提供纯色背景而不是主题使用的渐变之外,我还没有改变外观。

1 个答案:

答案 0 :(得分:0)

您可以使用TextView.setTextColor(ColorStateList)来实现此目标。

要创建ColorStateList,只需使用不同的“个案”初始化您感兴趣的状态标志组合。例如:

ColorStateList colors = new ColorStateList(
    new int[][] {
        new int [] { android.R.attr.state_pressed },
        new int [] { android.R.attr.state_selected },
        new int[0],
    },
    new int[] {
        highlightedColor,
        highlightedColor,
        color,
    });

tv.setTextColor(colors);

这将在正常状态下使用“color”,在按下或选择TextView时使用“highlightedColor”。有关可能状态的列表,请参阅R.attr。您可能对state_checked感兴趣但我没有测试过这种情况。