Android 代码添加的复选框外观不正确?

Android checkboxes added by code don't have the right appearance?

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

见下文 - 根据定义,Foo 在 LinearLayout 中;正在以编程方式添加栏。 Foo 显示为灰色框用于检查,Bar 显示为白色框。

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);
}

我已经尝试将可绘制对象设置为一些 android.R.drawable 类型,但是没有任何东西与 Foo 复选框匹配,所以我现在完全被难住了。

使用 cb.setButtonDrawable(R.drawable.cbOutline);,其中 "cbOutline" 是您在 XML 中定义的复选框轮廓的可绘制对象。

AppCompat 将默认小部件替换为有色、一致的样式,如 Android Support Library 22.1 blog post:

中所述

This is done automatically when inflating layouts - replacing Button with AppCompatButton, TextView with AppCompatTextView, etc. to ensure that each could support tinting.

如果您想以编程方式创建这些,您可以在代码中使用 AppCompatCheckBox 代替 Checkbox,传入当前的 Context,例如 [=16] =].

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

您应该使用 activity 上下文而不是应用程序上下文来创建按钮。如果您使用 getApplicationContext() 它不会扩展 ContextThemeWrapper.

尝试改变

CheckBox cb = new CheckBox(getApplicationContext());

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