AppCompatCheckBox在API 21以下无法使用

4
我用以下代码创建了一个动态复选框:
xml:
<LinearLayout
    android:id="@+id/layout_checkbox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">


</LinearLayout>

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

现在从上面的代码中只有 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"/>

但我不能在xml中定义复选框,因为我必须动态创建它。
即使是对于低于LOLLIPOP的版本,setButtonTintList也不起作用。
如何使用AppCompatCheckBox显示低于LOLLIPOP版本的复选框?
2个回答

9
不要使用getApplicationContext(), 对于传递给new AppCompatCheckBox()Context, 您需要使用一个指向您的活动(扩展了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);
    }
  }

}

2

这绝对可行。

 <android.support.v7.widget.AppCompatCheckBox
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Testing"
                app:buttonTint="@color/colorAccent"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接