2015-05-05 3 views
0

Я делаю приложение, со следующими свойствами:Противоречивый внешний вид Флажок

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

Интересно, что 1 и 2 раньше выглядели одинаково, прежде чем я начал поддерживать более поздние версии Android.

3) X и 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 использует еще один стиль, но в в этом случае он соответствует темному стилю Activity.

Однако, когда я протестировать приложение на моем Moto G, флажок не появляется:

Checkbox 4 - not there

Может кто-нибудь пролить некоторый свет на это? Почему флажки появляются в этих трех разных стилях и как я могу их контролировать? Почему последний флажок не отображается вообще?


EDIT: Эта последняя проблема, кажется, вызвана моей деятельности, используя стиль, который наследуется от Theme.AppCompat:

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

Если удалить родительскую тему, то Галочка появляется снова. Таким образом, по-видимому, есть некоторые проблемы с моей установкой appcompat. Вот как я добавляю зависимость в build.gradle:

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

Дайте вашей CheckBox 'custom style', раз и навсегда. –

+0

Спасибо, но меня больше беспокоит, почему это происходит - в частности, 3-й случай, когда флажок невидим. – Dan

+0

Возможно, ваш Moto G использует настроенную тему? –

ответ

0

Проблема вызвана изменением версии библиотеки поддержки v7.

Если мой build.gradle содержит строку:

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

тогда все Флажки выглядят одинаково, но как только я его модернизировать, сказать:

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

Появление изменений Флажки ,

В случае исчезнувшего флажка это означает, что флажок полностью ЧЕРНЫЙ, поэтому он смешивается с фоном.

Смежные вопросы