我有一个非常基本的应用程序,我正在尝试插入动态复选框,我可以让它们出现,但它们没有显示正确的样式。
见下文 - 根据定义,Foo位于LinearLayout中; Bar正在以编程方式添加。 Foo正在显示一个灰色框进行检查,条形图显示为白色框。
以下是创建这些代码的代码:
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复选框相匹配,所以我完全被这一点困住了。
答案 0 :(得分:1)
AppCompat使用有色,一致的样式替换默认窗口小部件,如Android Support Library 22.1 blog post中所述:
这在展开布局时自动完成 - 将
Button
替换为AppCompatButton
,TextView
替换为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.