android - AppCompatCheckBox 不适用于 API 21 以下

标签 android xml checkbox android-appwidget android-checkbox

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

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 中定义复选框,因为我必须动态创建它。

即使 setButtonTintList 也不适用于以下 LOLLIPOP

如何使用 AppCompatCheckBox 显示以下 LOLLIPOP 版本的复选框?

最佳答案

不要使用 getApplicationContext(),对于传递给 new AppCompatCheckBox()Context,您需要使用对您的 Activity 的引用(扩展 AppCompatActivity)上下文以正确注入(inject) AppCompatCheckBox 的样式。这将是 new AppCompatCheckBox(this) 如果您在 Activity 中创建它,或者 new AppCompatCheckBox(getActivity()) 如果您在 fragment 中创建它。

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

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

}

关于android - AppCompatCheckBox 不适用于 API 21 以下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685017/

相关文章:

javascript - jQuery 在单击复选框后更改类在多次单击后工作

java - Android 无法正确加载

xml - XSLT 中的词频计数器

android - Android在TextView上每个字母周围的边框

c# - 在 XML 文件中包含二进制数据

javascript - 在 jasmin 中使用测试 Angular 复选框

属性内的 C# 计时器

android - 尝试在Android Studio中创建新项目时发生Gradle错误

android - 有没有办法获取应用程序的当前状态?

android - 单击时隐藏和显示搜索 View