AppCompatCheckBox不适用于以下API 21

dee*_*pak 4 xml checkbox android android-checkbox android-appwidget

我使用以下代码创建了动态复选框:

XML:

<LinearLayout
    android:id="@+id/layout_checkbox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">


</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

的.java:

LinearLayout ll = (LinearLayout) findViewById(R.id.layout_checkbox);

ll.removeAllViews();

for (int i = 0; i < 10; i++) {

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

    AppCompatCheckBox myCheckBox = new AppCompatCheckBox(getApplicationContext());
    myCheckBox.setText(i);
    myCheckBox.setTextColor(Color.parseColor("#FFFFFF"));
    myCheckBox.setHintTextColor(Color.parseColor("#FFFFFF"));
    myCheckBox.setTextSize(12);

    myCheckBox.setId(i);

    ll.addView(myCheckBox, lp);
}
Run Code Online (Sandbox Code Playgroud)

现在从上面的代码只有LOLLIPOP版本显示带有文本的复选框.对于以下LOLLIPOP版本,它仅显示Text但不显示复选框.

如果我将以下代码放在xml文件中,同样适用于所有设备:

<android.support.v7.widget.AppCompatCheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Testing"
    android:buttonTint="@color/colorAccent"/>
Run Code Online (Sandbox Code Playgroud)

但我不能在xml中定义复选框,因为我必须动态创建它.

即使setButtonTintList不在下面工作LOLLIPOP

如何在下面的LOLLIPOP版本中显示Checkbox AppCompatCheckBox

Ale*_*end 8

不要使用getApplicationContext(),因为Context传入new AppCompatCheckBox()你需要使用对你的活动(扩展AppCompatActivity)上下文的引用来正确地为它注入样式AppCompatCheckBox.这将是new AppCompatCheckBox(this),如果你在活动中创造这个,或者new AppCompatCheckBox(getActivity())如果你在一个片段创建此.

下面的代码适用于所有版本:

public class MainActivity extends AppCompatActivity {

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
    for (int i = 0; i < 10; i++) {
      LinearLayout.LayoutParams lp =
          new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

      AppCompatCheckBox myCheckBox = new AppCompatCheckBox(this);
      myCheckBox.setText("text");
      myCheckBox.setTextSize(12);

      myCheckBox.setId(i);

      layout.addView(myCheckBox, lp);
    }
  }

}
Run Code Online (Sandbox Code Playgroud)