AppCompatCheckBox 不适用于以下 API 21
AppCompatCheckBox not working for below API 21
我使用以下代码创建了一个动态复选框:
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
) 上下文以正确注入 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);
}
}
}
这绝对有效
<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"/>
我使用以下代码创建了一个动态复选框:
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
) 上下文以正确注入 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);
}
}
}
这绝对有效
<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"/>