android - 在 Android PreferenceActivity 中应用复选框样式

标签 android android-preferences preferenceactivity

我正在编写一个 SDK 10+ 的应用程序。我希望“Activity ”和“首选项 Activity ”中的所有复选框看起来都相同。我创建了一个具有 Theme.Black 父级的主题。我创建了 android:Widget.CompoundButton.CheckBox 的子样式,并将 android:checkboxStyle 设置为该子主题。我已在应用程序 list 元素中的整个应用程序中应用了我的主题:

android:theme="@style/AppTheme"

当我查看主 Activity 时,复选框样式已按预期应用,但 PreferenceActivity 中的复选框没有该样式。我的问题是:

  • 是否可以对首选项的小部分进行样式设置,而无需为每个首选项指定全新的布局?
  • 更一般地说,我想对首选项中显示的其他控件执行此操作,例如切换或开关。那可能吗? (我的猜测是,一个解决方案几乎也能够应用于这些特定问题)

我知道嵌套首选项存在问题,但这个问题适用于顶层的首选项。任何帮助是极大的赞赏。我已经用头撞墙几个小时了......

这是我到目前为止所拥有的:

首选项.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);
    }

}

样式.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>

最佳答案

看起来问题出在以下行:

<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”样式来做)所以,问题解决了。

关于android - 在 Android PreferenceActivity 中应用复选框样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12803353/

相关文章:

android - 新的 Android 12+ MaterialSwitch 和 androidx.preference

android - MultiSelectListPreference 示例

android - 如何使共享操作图标变为白色而不是灰色

android - Genymotion openGL错误

android - 在 PreferenceScreen 中为文本设置自定义字体

android - 无法通过 ?attr 设置标题首选项图标

android - 用于在 PreferenceActivity 中选择百分比数字的对话框

android - 如何在 Android 3.0 中为 PreferenceActivity 设置自定义布局?

Java 日期格式。迄今为止的字符串

android - 带有游标加载器的 Volley 或 Service