我正在编写一个 SDK 10+ 的应用程序。我希望我的活动中的所有复选框以及我的 PreferenceActivity 看起来都一样。我创建了一个 Theme.Black 父主题。我创建了 android:Widget.CompoundButton.CheckBox 的子样式并将 android:checkboxStyle 设置为该子主题。我在应用程序清单元素中的整个应用程序中应用了我的主题:
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);
}
}
主要的.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>