复选框外观不一致

时间:2015-05-05 07:40:04

标签: android checkbox

我正在制作具有以下属性的应用:

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="22" />

目前我使用3种不同的方法来显示复选框,所有这些方法都有所不同!

1)从XML中膨胀:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <CheckBox 
        android:id="@+id/dialog_fish_autoeat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="@string/dialog_shop_autoeat"/>

</LinearLayout>

代码:

// Passing null as the parent, as this is the layout for an AlertDialog
final View inflate = game.getLayoutInflater().inflate(
            R.layout.dialog_fish, null);
builder.setView(inflate);
builder.show();

结果是一个看起来非常好的Checkbox,因为它符合对话框的样式:

Checkbox 1 - looks good

2)在代码中创建:

final CheckBox autoEquip;
autoEquip = new CheckBox(game);
autoEquip.setText(R.string.dialog_shop_autoequip);
autoEquip.setChecked(newStrength > oldStrength);
AlertDialog.Builder builder = new AlertDialog.Builder(game);
builder.setView(autoEquip);
builder.show();

结果是一个复选框,与添加到的对话框相比,看起来很暗且不合适:

Checkbox 2 - too dark

有趣的是,在我开始支持更高版本的Android之前,1和2曾经看起来相同。

3)XML和Activity.setContentView:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:gravity="center_vertical|center_horizontal"
    android:background="@color/menu_bg"
    tools:context=".Menu" >

    <CheckBox
        android:id="@+id/endgame_submit_score"
        android:text="@string/endgame_submit_score"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true" />

</LinearLayout>

Android Studio中的活动预览显示预期结果:

Checkbox 3 preview - looks good

此Checkbox使用另一种样式,但在这种情况下,它适合活动的黑暗风格。

然而,当我在我的Moto G上测试应用程序时,没有出现复选框:

Checkbox 4 - not there

有人可以对此有所了解吗?为什么复选框出现在这3种不同的样式中,我该如何控制它们?为什么最后一个Checkbox根本没有出现?

编辑:这最后一个问题似乎是由我的Activity使用继承自Theme.AppCompat的样式引起的:

<style name="Menu" parent="@style/Theme.AppCompat" >

如果我删除父主题,则会再次出现Checkbox。所以,我的appcompat设置可能存在一些问题。以下是我在build.gradle中添加依赖项的方法:

dependencies {
    compile 'com.android.support:appcompat-v7:22.1.1'
}

1 个答案:

答案 0 :(得分:0)

问题是由更改v7支持库的版本引起的。

如果我的build.gradle包含以下行:

compile 'com.android.support:appcompat-v7:20.0.0'

然后所有复选框看起来都一样,但是一旦我将它升级到,请说:

compile 'com.android.support:appcompat-v7:21.0.0'

复选框的外观发生变化。

对于消失的Checkbox,这是因为Checkbox完全是BLACK,因此它与背景混合。