【问题标题】:AppCompatCheckBox not working for below API 21AppCompatCheckBox 不适用于 API 21 以下
【发布时间】:2016-06-11 15:13:15
【问题描述】:

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

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以下

如何在LOLLIPOP 以下版本中显示带有AppCompatCheckBox 的复选框?

【问题讨论】:

    标签: android xml checkbox android-appwidget android-checkbox


    【解决方案1】:

    不要使用getApplicationContext(),对于传递给new AppCompatCheckBox()Context,您需要使用对您的活动(扩展AppCompatActivity)上下文的引用才能正确注入AppCompatCheckBox的样式.如果您在 Activity 中创建,则为 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"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-09
        • 1970-01-01
        • 2019-10-01
        • 2015-01-22
        • 2019-07-27
        • 1970-01-01
        • 2018-11-08
        • 1970-01-01
        相关资源
        最近更新 更多