2

SDK10以降のアプリケーションを作成しています。アクティビティのすべてのチェックボックスとPreferenceActivityを同じように表示したいと思います。Theme.Blackの親を持つテーマを作成しました。android:Widget.CompoundButton.CheckBoxの子スタイルを作成し、android:checkboxStyleをその子テーマに設定しました。アプリケーションマニフェスト要素のアプリ全体にテーマを適用しました。

android:theme="@style/AppTheme"

メインのアクティビティを見ると、チェックボックスのスタイルは期待どおりに適用されていますが、PreferenceActivityのチェックボックスにはスタイルがありません。私の質問は次のとおりです。

  • それぞれにまったく新しいレイアウトを指定しなくても、設定のマイナーな部分をスタイリングすることは可能ですか?
  • より一般的には、トグルやスイッチなど、設定に表示される他のコントロールに対してこれを実行したいと思います。それは可能ですか?(私の推測では、1つの解決策は、これらの特定の問題にもほぼ適用できると思います)

ネストされた設定に問題があることは知っていますが、この質問はトップレベルの設定に当てはまります。どんな助けでも大歓迎です。私はここ数時間、この壁に頭をぶつけてきました...

これが私がこれまでに持っているものです:

prefs.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <CheckBoxPreference
        android:key="checkbox1"
        android:summary="This is a themed checkbox preference"
        android:title="Checkbox 1" />

</PreferenceScreen>

ThemedPreferenceActivity.java

public class ThemedPreferencesActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <CheckBox
        android:id="@+id/checkBox1"
        android:text="CheckBox"
        android:checked="true"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" style="@style/AppTheme.Preference.Checkbox" />


</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

}

style.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="android:Theme.Black">    
        <item name="android:checkboxStyle">@style/AppTheme.Preference.Checkbox</item>
    </style>

    <style name="AppTheme.Preference.Checkbox" parent="android:Widget.CompoundButton.CheckBox">
        <item name="android:button">@drawable/pref_checkbox</item>
        <item name="android:background">#FF0000</item>
    </style>
</resources>

pref_checkbox.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="true" android:drawable="@android:drawable/ic_menu_call" />
    <item android:state_checked="false" android:drawable="@android:drawable/ic_menu_camera" />
</selector>
4

1 に答える 1

2

問題は次の行にあるようです。

<style name="AppTheme.Preference.Checkbox" parent="android:Widget.CompoundButton.CheckBox">
    <item name="android:button">@drawable/pref_checkbox</item>
    <item name="android:background">#FF0000</item> <---- RIGHT HERE
</style>

チェックボックスの誤動作の原因となっていることを指定しているようです。とにかくそれは必要なかったことがわかりました(実際、必要に応じて「ListView」スタイルで実行することに気づきました)ので、問題は解決しました。

于 2012-10-09T17:00:40.563 に答える