【问题标题】:Android checkboxes added by code don't have the right appearance?由代码添加的 Android 复选框外观不正确?
【发布时间】:2015-09-04 04:50:07
【问题描述】:

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

见下文 - Foo 根据定义位于 LinearLayout 中; Bar 正在以编程方式添加。 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);
}

我尝试将 drawable 设置为一些 android.R.drawable 类型,但没有与 Foo 复选框匹配,所以我现在完全被难住了。

【问题讨论】:

  • 你在使用AppCompatActivity吗?
  • 可能是你的布局定位有问题。只需尝试 matchparent 为您的布局的宽度和高度,然后将复选框添加到您的布局。
  • @ianhanniballake - 是的,我正在使用 AppCompatActivity - 这是我启动项目时的默认设置。
  • @Sridhar - 我尝试使用 LayoutParams 设置宽度和高度,但它没有机会绘制。
  • @ctgilley 发布您的完整代码

标签: android checkbox android-drawable


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢 - 这解决了它。
【解决方案2】:

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

尝试改变

CheckBox cb = new CheckBox(getApplicationContext());

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

【讨论】:

  • 有一次我在那里使用了一个非前面的“this”,这导致了同样的结果;正如您在此处所指出的,我会尝试在前面加上“this”。
  • 这似乎也修复了它。
【解决方案3】:

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

【讨论】:

  • 我没有定义可绘制的复选框;我只想使用设备/操作系统版本的默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多