通过代码添加的Android复选框没有正确的外观?

时间:2015-09-03 02:02:48

标签: android checkbox android-drawable

我有一个非常基本的应用程序,我正在尝试插入动态复选框,我可以让它们出现,但它们没有显示正确的样式。

见下文 - 根据定义,Foo位于LinearLayout中; Bar正在以编程方式添加。 Foo正在显示一个灰色框进行检查,条形图显示为白色框。

Link to image...

以下是创建这些代码的代码:

for (Integer i=0; i < arArray.length;i++) {
    CheckBox cb = new CheckBox(getApplicationContext());
    cb.setText("Bar");
    cb.setTextColor(getResources().getColor(android.R.color.black));
    cb.setOnCheckedChangeListener(clListener);
    llDeckChecks.addView(cb);
}

我已经尝试将drawable设置为一些android.R.drawable类型,但是没有任何东西与Foo复选框相匹配,所以我完全被这一点困住了。

3 个答案:

答案 0 :(得分:1)

AppCompat使用有色,一致的样式替换默认窗口小部件,如Android Support Library 22.1 blog post中所述:

  

这在展开布局时自动完成 - 将Button替换为AppCompatButtonTextView替换为AppCompatTextView等,以确保每个布局都支持着色。

如果您想以编程方式创建这些内容,可以在代码中使用AppCompatCheckBox代替Checkbox,并传入当前Context,例如AppCompatActivity

注意:不使用getApplicationContext()非常重要,因为需要样式信息。

答案 1 :(得分:0)

使用cb.setButtonDrawable(R.drawable.cbOutline);,其中“cbOutline”是您在XML中定义的复选框大纲的可绘制内容。

答案 2 :(得分:0)

您应该使用活动上下文来创建按钮而不是应用程序上下文。如果您使用getApplicationContext(),则不会延长ContextThemeWrapper

尝试更改

CheckBox cb = new CheckBox(getApplicationContext());

CheckBox cb = new CheckBox(YourActivity.this); // or getActivity() if in a fragment.